本文提供了MySQL 8.0.28数据库系统在生产环境中的完整二进制安装部署指南。采用二进制安装方式,避免了编译安装的复杂性,同时保证了性能和生产环境的稳定性。指南涵盖了从系统准备、软件安装、配置优化、安全加固到服务管理的全流程,特别注重生产环境下的安全性、性能调优和可维护性配置。
一、安装前准备
在部署MySQL之前,必须对目标系统进行全面检查,确保满足MySQL 8.0的运行要求,并安装必要的依赖包。
1.系统要求检查
MySQL 8.0对操作系统版本和硬件有一定要求,需要进行兼容性检查。同时检查系统资源确保满足数据库运行需求。
检查要点:
- 系统版本:确认是CentOS 7+或RHEL 7+(MySQL 8.0的最低要求)
- 系统架构:必须是x86_64(64位)架构
- 内存要求:建议至少2GB RAM,生产环境建议8GB以上
- 磁盘空间:数据目录至少需要预留足够的空间(根据业务数据量决定)
sh
# 检查系统版本
cat /etc/redhat-release # CentOS/RHEL
cat /etc/os-release # 通用检查
# 检查架构
uname -m
# 应该是 x86_64
# 检查内存和磁盘
free -h
df -h
2.安装依赖包
MySQL运行需要一些系统库的支持,这些依赖包提供必要的功能支持。
依赖包功能说明:
- libaio:异步I/O库,提高数据库I/O性能
- numactl:NUMA架构支持,优化多处理器系统性能
- ncurses:终端处理库,用于命令行界面
sh
# CentOS/RHEL
yum install -y libaio numactl-libs ncurses-compat-libs
# Ubuntu/Debian
apt-get update
apt-get install -y libaio1 libnuma1 libncurses5
3.关闭selinux及关闭防火墙
为简化部署过程,临时关闭安全增强功能。生产环境中应根据实际情况配置SELinux和防火墙规则。
生产环境建议:
• SELinux:可以设置为enforcing模式,但需要配置正确的安全上下文
• 防火墙:应该开启,但需要添加规则放行MySQL端口(默认3306)
sh
setenforce 0 #临时关闭selinux
getenforce #查看关闭selinux
#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
二、下载解压
1.下载安装包
从MySQL官方下载站点获取对应版本的二进制安装包,确保软件包的完整性和安全性。
版本选择说明:
- glibc2.12:适用于CentOS/RHEL 7等较新系统
- glibc2.17:适用于更老版本的系统
- 根据系统
ldd --version命令查看glibc版本进行选择
sh
https://cdn.mysql.com/archives/mysql-8.0/mysql-8.0.28-linux-glibc2.12-x86_64.tar.xz
https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.28-linux-glibc2.17-x86_64.tar.xz
2.创建MySQL系统用户
为MySQL创建专用的系统用户,遵循安全最佳实践,避免使用root用户运行数据库服务。
用户配置说明:
- /sbin/nologin:禁止用户登录系统,提高安全性
- -M:不创建家目录,因为MySQL不需要用户登录
- 专用用户有助于权限隔离和安全审计
sh
# 创建mysql用户 -s 表示指定用户所用的shell -M 表示不创建用户主目录
useradd mysql -s /sbin/nologin -M
# 验证创建结果
id mysql

3.解压安装包
将MySQL二进制包解压到标准目录,创建软链接便于版本管理。
目录结构说明:
- /usr/local/mysql:主安装目录(通过软链接指向实际版本目录)
- 软链接的好处:升级时只需更改软链接指向,不影响应用程序配置
sh
# 解压到/usr/local目录
cd /data/software/
tar -xvf mysql-8.0.28-linux-glibc2.12-x86_64.tar.xz -C /usr/local/
# 创建软链接(便于版本管理)
cd /usr/local
ln -s mysql-8.0.28-linux-glibc2.12-x86_64 mysql
# 设置权限
chown -R mysql:mysql mysql*
三、配置MySQL
创建必要的目录结构,编写配置文件,设置环境变量,为MySQL的运行做好准备。
1.创建数据目录和日志目录
根据最佳实践,将数据文件、日志文件等与程序文件分离存储,便于管理和备份。
目录规划说明:
- 分离存储:程序、数据、日志分离,便于管理和维护
- 权限控制:严格的文件权限,防止未授权访问
- 可扩展性:数据目录独立,便于后续扩展存储
sh
# 创建数据目录
mkdir -p /data/mysql/data
mkdir -p /data/mysql/logs
mkdir -p /data/mysql/tmp
# 设置权限
chown -R mysql:mysql /data/mysql
chmod 750 /data/mysql/data
2.创建配置文件
编写MySQL配置文件,根据硬件资源和业务需求进行优化配置。
sh
# 创建主配置文件
cat > /etc/my.cnf << EOF
[mysqld]
# 基础设置
basedir=/usr/local/mysql
datadir=/data/mysql/data
socket=/tmp/mysql.sock
port=3306
user=mysql
#不区分大小写
lower_case_table_names=1
# 字符集设置
character-set-server=utf8mb4
# 连接设置
max_connections=1000
max_connect_errors=10000
wait_timeout=28800
interactive_timeout=28800
# 缓冲池设置(根据内存调整,建议为系统内存的50-70%)
innodb_buffer_pool_size=2G
innodb_buffer_pool_instances=8
# 日志设置
log-error=/data/mysql/logs/mysql-error.log
#启动慢sql记录
slow_query_log=1
slow_query_log_file=/data/mysql/logs/mysql-slow.log
long_query_time=5
# 二进制日志(主从复制需要)
server-id=1
log-bin=/data/mysql/logs/mysql-bin
binlog_format=ROW
expire_logs_days=15
# 其他优化
innodb_flush_log_at_trx_commit=1
sync_binlog=1
[mysql]
default-character-set=utf8mb4
[client]
socket=/tmp/mysql.sock
EOF
3.设置环境变量
将MySQL的bin目录添加到系统PATH,方便在任何位置执行MySQL命令。
环境变量作用:
- MYSQL_HOME:定义MySQL主目录,便于脚本引用
- PATH:添加MySQL命令到系统路径,无需输入完整路径
sh
# 添加到全局环境变量
echo 'export MYSQL_HOME=/usr/local/mysql' >> /etc/profile
echo 'export PATH=$MYSQL_HOME/bin:$PATH' >> /etc/profile
# 立即生效
source /etc/profile
# 验证环境变量
echo $PATH
四、初始化MySQL
1.初始化数据目录
初始化MySQL数据目录,创建系统数据库(mysql、information_schema等),生成初始root密码。
初始化注意事项:
- 临时密码:务必记录生成的临时密码,首次登录需要使用
- 初始化过程:创建系统表、设置初始权限结构
- 日志位置:初始化日志在错误日志文件中查看
sh
# 切换到mysql安装目录
cd /usr/local/mysql
# 初始化MySQL(重要:记录输出的临时root密码)
mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data
# 如果看到类似下面的输出,请务必记录临时密码:
2025-09-26T02:59:10.797440Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2025-09-26T02:59:11.903849Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2025-09-26T02:59:13.435531Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: <GQ7CjoHjQ,6

2.设置文件权限
确保所有MySQL相关文件的权限正确,遵循最小权限原则。
权限设置原则:
- 数据目录:mysql用户完全控制,其他用户无权限
- 程序文件:可执行权限,确保MySQL能正常运行
- 配置文件:适当权限,防止未授权修改
sh
# 确保所有文件权限正确
chown -R mysql:mysql /usr/local/mysql*
chown -R mysql:mysql /data/mysql
# 设置MySQL二进制文件权限
chmod 755 /usr/local/mysql/bin/*
3.安装SSL证书
为MySQL生成自签名的SSL证书,启用加密连接,提高数据传输安全性。
SSL证书作用:
- 加密连接:保护客户端与服务器之间的数据传输
- 身份验证:验证服务器身份,防止中间人攻击
- 生产建议:生产环境建议使用正规CA颁发的证书
sh
# 安装MySQL自带的SSL证书
mysql_ssl_rsa_setup --datadir=/data/mysql/data
五、启动MySQL
1.创建systemd服务文件
创建systemd服务文件,将MySQL作为系统服务管理,便于启动、停止和状态监控。
systemd配置要点:
- Type=notify:MySQL支持systemd通知机制,启动状态更准确
- Restart=on-failure:失败时自动重启,提高服务可用性
- LimitNOFILE:设置文件描述符限制,确保足够资源
sh
# 创建systemd服务文件
cat > /etc/systemd/system/mysqld.service << EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
Type=notify
TimeoutSec=0
PermissionsStartOnly=true
ExecStartPre=/usr/bin/mkdir -p /var/run/mysqld
ExecStartPre=/usr/bin/chown mysql:mysql /var/run/mysqld
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf \$MYSQLD_OPTS
LimitNOFILE=65535
Restart=on-failure
RestartPreventExitStatus=1
Environment=MYSQLD_OPTS=--pid-file=/var/run/mysqld/mysqld.pid
PrivateTmp=false
EOF
2.启动MySQL服务
sh
# 重新加载systemd配置
systemctl daemon-reload
# 启动MySQL服务
systemctl start mysqld
# 设置开机自启
systemctl enable mysqld
# 检查服务状态
systemctl status mysqld
# 查看进程
ps -ef | grep mysql
六、安全配置
1.修改root密码
修改默认密码,运行安全脚本,创建合适的用户和权限,确保数据库安全。
sh
# 使用临时密码登录(将下面的密码替换为初始化时生成的临时密码)
mysql -uroot -p'kluw9U.ONvWS'
# 在MySQL中执行密码修改
ALTER USER 'root'@'localhost' IDENTIFIED BY 'LKfAtBW&Oq0Y^H%M';
FLUSH PRIVILEGES;
2.运行安全脚本
sh
# 使用mysql_secure_installation进行安全加固
mysql_secure_installation
# 按照提示进行以下安全设置:
# 1. 验证root密码
# 2. 是否修改root密码(可选)
# 3. 移除匿名用户(选择Y)
# 4. 禁止root远程登录(生产环境建议Y)
# 5. 移除test数据库(选择Y)
# 6. 立即重新加载权限表(选择Y)
3.创建管理用户
根据最小权限原则创建专用用户,避免直接使用root账户
sh
-- 创建专用管理用户
#创建远程root用户
create USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'LKfAtBW&Oq0Y^H%M';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
-- 创建远程连接用户(如果需要)
CREATE USER 'remote'@'%' IDENTIFIED BY 'RemotePassword123!';
GRANT SELECT, INSERT, UPDATE, DELETE ON *.* TO 'remote'@'%';
FLUSH PRIVILEGES;
elasticsearch 8.13.2 详细部署指南
本文提供了一份完整的Elasticsearch 8.13.2在生产环境中的部署指南。涵盖了从系统优化、安全配置到服务管理的全流程,特别注重生产环境下的安全性和稳定性配置。指南包括TLS/SSL证书配置、系统资源调优、systemd服务集成以及用户权限管理等关键环节,适合用于构建安全、可靠的Elasticsearch集群。
一、部署前准备
在部署Elasticsearch之前,必须对操作系统进行优化配置,以确保Elasticsearch能够获得足够的系统资源并稳定运行。
1.修改文件描述符最大及进程数量打开上限
Elasticsearch在处理大量数据时可能需要同时打开很多文件(如索引分片、日志文件等),默认的文件描述符限制通常不足以支持生产环境需求。提高这些限制可以避免出现"打开文件过多"的错误。
- soft nofile 65535:设置每个进程可打开的文件描述符软限制为65535
- hard nofile 131070:设置硬限制为131070,这是软限制的上限值
- hard nproc 8192:设置用户最大进程数为8192,确保ES有足够的进程资源
sh
[root@elk101 ~]# cat > /etc/security/limits.d/es.conf <<EOF
* soft nofile 65535
* hard nofile 131070
* hard nproc 8192
EOF
2.修改虚拟内存映射上限
Elasticsearch使用mmap来高效访问索引文件,vm.max_map_count参数定义了进程可以拥有的内存映射区域的最大数量。默认值通常较低,需要增加以避免内存映射不足的问题。
sh
查看内核参数:
[root@elk101 ~]# sysctl -q vm.max_map_count
vm.max_map_count = 262144
临时修改内核参数(重启OS后配置丢失):
[root@elk101 ~]# sysctl -w vm.max_map_count=262144
永久生效内核参数(重启OS后配置不丢失) 强烈推荐
[root@elk101 ~]# cat > /etc/sysctl.d/es.conf <<EOF
vm.max_map_count=262144
EOF
[root@elk101 ~]# sysctl -f /etc/sysctl.d/es.conf
3.安装jdk
Elasticsearch是基于Java开发的,需要JDK运行环境。Elasticsearch 8.13.2需要JDK 17或更高版本。
sh
#01 Oracle JDK下载地址:https://www.oracle.com/java/technologies/downloads/
#02 解压软件包
[root@ecm-d323 software]# tar xf jdk-17.0.15_linux-x64_bin.tar.gz
[worker@es-node-27 ~]$ vim /etc/profile.d/java.sh
#添加环境变量
export PATH=/data/software/jdk-17/bin:$PATH
4.创建es用户
出于安全考虑,不应该使用root用户运行Elasticsearch。创建专用用户可以限制权限,降低安全风险。
sh
[root@elk101 ~]# useradd elastic
此部署方案为企业级生产环境提供了坚实的基础,遵循了MySQL最佳实践和Linux系统管理标准,确保了数据库系统的安全性、稳定性和可维护性。根据具体业务场景和性能要求,可以在此基础上进行进一步的优化和定制配置。