1. MySQL 8.4 LTS 二进制包部署全流程
MySQL 8.4 LTS 作为长期支持版本,在生产环境中表现出优异的稳定性和性能。相比源码编译安装,Generic 二进制包方案具有开箱即用、兼容性强的特点,特别适合需要快速部署的场景。下面以 CentOS 8 为例,详细讲解部署过程。
1.1 环境准备与依赖检查
在开始安装前,需要确保系统满足基本要求。我遇到过不少案例是因为依赖缺失导致安装失败,所以这一步特别重要:
# 检查系统glibc版本(MySQL 8.4要求glibc 2.17+) ldd --version # 清理可能冲突的MariaDB rpm -qa | grep mariadb sudo rpm -e --nodeps mariadb-libs # 安装基础依赖 sudo yum install -y libaio numactl openssl-devel对于内存小于2GB的服务器,建议先创建swap分区。实测在1核1GB的测试机上,没有swap分区会导致初始化失败:
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile1.2 二进制包下载与解压
从MySQL官网下载时要注意选择正确的glibc版本。这里有个小技巧:如果网络不稳定,可以先用迅雷等工具下载到本地,再用scp上传到服务器:
# 官方下载(需替换实际版本号) wget https://dev.mysql.com/get/Downloads/MySQL-8.4/mysql-8.4.0-linux-glibc2.17-x86_64.tar.xz # 解压并重命名目录 tar -xvf mysql-8.4.0-linux-glibc2.17-x86_64.tar.xz mv mysql-8.4.0-linux-glibc2.17-x86_64 /usr/local/mysql建议将MySQL安装在/usr/local目录,这是Linux下第三方软件的常规安装位置。我见过有人直接解压到/home目录下,后期容易出现权限问题。
1.3 目录结构与权限配置
生产环境需要规范的目录规划,这是我的推荐结构:
/usr/local/mysql ├── bin # 二进制文件 ├── data # 数据目录(需单独挂载磁盘) ├── log # 日志目录 │ ├── error.log # 错误日志 │ ├── slow.log # 慢查询日志 │ └── binlog # 二进制日志 └── tmp # 临时文件创建目录并设置权限:
sudo mkdir -p /usr/local/mysql/{data,log/binlog,tmp} sudo chown -R mysql:mysql /usr/local/mysql sudo chmod 750 /usr/local/mysql特别注意:data目录要确保mysql用户有写权限,否则初始化时会报"InnoDB: Operating system error number 13 in a file operation"错误。
2. 配置文件深度调优
MySQL 8.4的默认配置偏保守,需要根据服务器硬件调整。下面以16核32GB内存的服务器为例,讲解关键参数配置。
2.1 基础配置模板
先创建/etc/my.cnf文件,包含这些基础设置:
[mysqld] # 目录设置 basedir = /usr/local/mysql datadir = /usr/local/mysql/data tmpdir = /usr/local/mysql/tmp socket = /tmp/mysql.sock # 网络设置 bind-address = 0.0.0.0 port = 3306 max_connections = 500 # 字符集 character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci2.2 内存参数计算
内存分配是性能调优的核心,重点参数的计算公式:
innodb_buffer_pool_size:总内存的50-70%
- 32GB内存:32*0.7=22.4GB → 24000M
innodb_buffer_pool_instances:每个实例1GB左右
- 22.4GB → 设置16个实例
key_buffer_size:MyISAM索引缓存(即使不用MyISAM也建议保留)
- 建议256M
具体配置:
# 内存配置 innodb_buffer_pool_size = 24G innodb_buffer_pool_instances = 16 key_buffer_size = 256M2.3 IO优化参数
针对SSD存储的优化配置:
# IO优化 innodb_io_capacity = 4000 innodb_io_capacity_max = 8000 innodb_flush_neighbors = 0 # SSD建议关闭 innodb_flush_method = O_DIRECT innodb_read_io_threads = 16 innodb_write_io_threads = 163. 初始化与启动避坑指南
MySQL 8.4的初始化流程有所变化,以下是实测可用的步骤。
3.1 安全初始化
使用--initialize-insecure可以生成空密码,适合自动化部署:
cd /usr/local/mysql bin/mysqld --initialize-insecure \ --user=mysql \ --basedir=/usr/local/mysql \ --datadir=/usr/local/mysql/data \ --log-error=/usr/local/mysql/log/error.log如果遇到"Can't find error-message file"错误,需要执行:
mkdir -p /usr/local/mysql/share cp -r share/* /usr/local/mysql/share/3.2 Systemd服务配置
创建/etc/systemd/system/mysql.service文件:
[Unit] Description=MySQL Server After=network.target [Service] User=mysql Group=mysql LimitNOFILE=65535 ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf Restart=on-failure RestartSec=30 [Install] WantedBy=multi-user.target启动并设置开机自启:
sudo systemctl daemon-reload sudo systemctl start mysql sudo systemctl enable mysql4. 安全加固与远程访问
4.1 修改root密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Complex@Password123'; FLUSH PRIVILEGES;4.2 创建远程访问用户
生产环境不建议直接开放root远程访问,应该创建专属用户:
CREATE USER 'admin'@'%' IDENTIFIED BY 'Admin@Secure456'; GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION;4.3 防火墙配置
sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent sudo firewall-cmd --reload5. 性能监控与维护
5.1 慢查询日志配置
# 在my.cnf中添加 slow_query_log = 1 slow_query_log_file = /usr/local/mysql/log/slow.log long_query_time = 1 log_queries_not_using_indexes = 15.2 常用监控命令
-- 查看连接数 SHOW STATUS LIKE 'Threads_connected'; -- 查看缓冲池命中率 SELECT (1 - (SELECT variable_value FROM performance_schema.global_status WHERE variable_name = 'Innodb_buffer_pool_reads') / (SELECT variable_value FROM performance_schema.global_status WHERE variable_name = 'Innodb_buffer_pool_read_requests')) * 100 AS buffer_pool_hit_ratio;这套配置在多个生产环境验证过,相比默认配置性能提升3-5倍。特别是在高并发场景下,合理的内存参数和IO配置能显著降低CPU使用率。建议部署完成后用sysbench进行压力测试,根据实际负载微调参数。