1043 字
5 分钟
生产环境部署 MySQL 8.0:基于官方二进制包的安装
系统环境说明
| 项目 | 值 |
|---|---|
| 操作系统 | Linux 发行版系统(CentOS 7 / Rocky Linux / RHEL / Debian / Ubuntu) |
| MySQL 版本 | 8.0.44 |
| 安装方式 | 官方二进制包.tar.xz |
| 安装路径 | /usr/local/mysql |
| 数据目录 | /data/mysql(多实例时如/data/mysql3307) |
| 用户权限 | 独立用户mysql |
| 启动方式 | systemd 服务,非脚本启动 |
| 监听端口 | 3306 |
| 运行用户 | mysql |
一、创建系统用户和目录结构
# 创建 mysql 组,如果提示已存在可忽略,继续后续步骤sudo groupadd mysql# 创建 mysql 用户,并加入 mysql 组,不允许登录系统,不创建 home 目录,如果提示已存在可忽略sudo useradd -r -g mysql -s /sbin/nologin -M mysql
# 创建安装目录和数据目录sudo mkdir -p /usr/local/mysqlsudo mkdir -p /data/mysqlsudo mkdir -p /data/mysql/logsudo mkdir -p /data/mysql/tmp
# 设置用户和用户组权限chown -R mysql:mysql /usr/local/mysqlchown -R mysql:mysql /data/mysql二、下载并解压官方 MySQL 二进制包
cd /usr/local/srcwget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.44-linux-glibc2.28-x86_64.tar.xz
sudo tar -xJf mysql-8.0.44-linux-glibc2.28-x86_64.tar.xz -C /usr/localsudo chown -R mysql:mysql /usr/local/mysql-8.0.44-linux-glibc2.28-x86_64
# 软连接统一入口(升级只需要切换软链)sudo ln -sfn /usr/local/mysql-8.0.44-linux-glibc2.28-x86_64 /usr/local/mysql可选:使用SElinux
# 赋予 SELinux 标签semanage fcontext -a -t mysqld_db_t "/data/mysql(/.*)?"semanage fcontext -a -t mysqld_var_run_t "/data/mysql/mysqld.pid"semanage fcontext -a -t mysqld_var_run_t "/data/mysql/mysql.sock"
# 应用生效restorecon -Rv /data/mysql三、设置环境变量并初始化数据库文件
初始化前确认数据目录为空(否则会失败)
3.1 设置环境变量
echo 'export PATH=/usr/local/mysql/bin:$PATH' | sudo tee /etc/profile.d/mysql.shsudo chmod 644 /etc/profile.d/mysql.shsource /etc/profile.d/mysql.shNOTE通过
/usr/local/mysql软连接统一管理 MySQL 版本 并将其加入 PATH,后续命令默认指向当前激活版本
3.2 初始化数据目录
初始化前确认数据目录为空(否则会失败)
使用 --log-error 指定日志文件输出位置,用于后续获取 Root 密码(需要 保证日志目录存在且 mysqld 用户有写权限)
/usr/local/mysql/bin/mysqld --initialize --basedir=/usr/local/mysql --datadir=/data/mysql --log-error=/data/mysql/log/mysql-error.log --user=mysql四、配置 /etc/my.cnf 配置文件
根据生产环境实际情况自定义:
[client]port=3306socket=/data/mysql/mysql.sockdefault-character-set=utf8mb4
[mysqld]######################################### 基础路径与进程########################################basedir=/usr/local/mysqldatadir=/data/mysqlsocket=/data/mysql/mysql.sockpid-file=/data/mysql/mysqld.pidport=3306user=mysqltmpdir=/data/mysql/tmp
# 建议仅本机管理默认绑定本地;如需对外提供服务再改 0.0.0.0 并配安全组/防火墙bind-address=127.0.0.1
# 避免 DNS 反查导致连接慢与线程堆积skip-name-resolve=1
# 显式字符集(避免客户端/服务器不一致)character-set-server=utf8mb4collation-server=utf8mb4_general_ci
######################################### 日志########################################log-error=/data/mysql/log/mysql-error.log
# 慢查询:生产建议开启,但阈值别太激进;1 秒在高并发场景会产生大量日志slow_query_log=1slow_query_log_file=/data/mysql/log/mysql-slow.loglong_query_time=2log_queries_not_using_indexes=0
######################################### 连接与资源########################################max_connections=500# 防止连接洪峰把实例拖死;建议配合应用连接池max_connect_errors=100
# 文件句柄限制(需系统 ulimit 配合)open_files_limit=65535
# 大 SQL/批量导入时可适当调大max_allowed_packet=64M
######################################### InnoDB(核心)########################################default_storage_engine=InnoDBinnodb_file_per_table=1
# 下面两个值强依赖内存与写入量:# - buffer_pool 建议为物理内存的 60%~70%(专用 MySQL 机器)innodb_buffer_pool_size=1G# - redo log 256M~2G 视写入量而定;写入越高可适当增大innodb_log_file_size=256M
# 保守的刷盘策略:强一致(性能换可靠性)innodb_flush_log_at_trx_commit=1sync_binlog=1
# SSD 建议开启 O_DIRECT,避免双缓存;HDD/虚拟化环境可按实际验证innodb_flush_method=O_DIRECT
######################################### 安全########################################symbolic-links=0
# 建议限制导入导出目录;如不需要导出可设置为空字符串禁用secure_file_priv=/tmp五、配置 systemd 启动文件
创建:/etc/systemd/system/mysqld.service
[Unit]Description=MySQL Server (8.0)Documentation=man:mysqld(8)After=network-online.targetWants=network-online.target
[Install]WantedBy=multi-user.target
[Service]User=mysqlGroup=mysqlType=notify
TimeoutStartSec=0OOMScoreAdjust=-1000ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnfLimitNOFILE=65536Restart=on-failureRestartPreventExitStatus=1PrivateTmp=false加载配置变动、设置自启,并立即启动
systemctl daemon-reloadsystemctl enable mysqld --now六、首次登录并修改 root 密码
# 从日志文件中查找初始密码grep 'temporary password' /data/mysql/log/mysql-error.log
# 登录 mysql 控制台mysql -uroot -p
# 修改密码(必须包含大小写字母+数字+特殊字符)ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewP@ssw0rd!';七、安全初始化与优化(可选)
# 禁用匿名账户DELETE FROM mysql.user WHERE user='';
# 禁用远程 root 登录UPDATE mysql.user SET host='localhost' WHERE user='root';
# 删除测试库DROP DATABASE test;
# 刷新权限FLUSH PRIVILEGES;八、其他建议(根据场景选用)
- 若使用多实例,可分别配置
/data/mysql3307/等数据目录和多个my3307.cnf文件 - 定期备份:使用
mysqldump或xtrabackup - 配合
fail2ban、iptables做安全防护 - 开启慢查询日志,监控 SQL 性能
- 禁用
skip-grant-tables,避免漏洞
生产环境部署 MySQL 8.0:基于官方二进制包的安装
https://www.self4m.com/posts/production-deploy-mysql-8-0-binary-on-linux/
商业用途必须事先获得作者授权;
非商业用途可以使用,但必须注明出处;
若有改编需采用相同许可协议发布。
非商业用途可以使用,但必须注明出处;
若有改编需采用相同许可协议发布。