1. 环境准备与依赖检查
在RedHat 8系统上安装MySQL 9.1之前,我们需要先做好基础环境准备。与常见的Ubuntu/Debian系发行版不同,RedHat系操作系统在软件包管理和依赖处理上有其特殊性。我曾在生产环境中多次部署MySQL,发现跳过依赖检查往往是后续各种诡异错误的根源。
1.1 系统版本确认
首先通过以下命令确认系统版本:
cat /etc/redhat-release典型输出应该是:
Red Hat Enterprise Linux release 8.x (Ootpa)注意:MySQL 9.1需要glibc 2.28+版本,而RHEL 8默认搭载的是2.28。如果是从RHEL 7升级上来的系统,建议先执行
sudo yum update glibc。
1.2 关闭SELinux和防火墙
在企业环境中这步需要谨慎操作,但对于测试环境可以临时关闭:
sudo setenforce 0 sudo systemctl stop firewalld1.3 安装基础依赖包
根据MySQL官方文档,9.1版本需要以下关键依赖:
sudo yum install -y libaio numactl libnsl libtinfo libgcc libstdc++ perl我特别要强调libnsl这个包——在最近一次客户现场部署时,就因为漏装它导致mysqld启动时报"undefined symbol: __nslexp_parse"错误。这个依赖在MySQL 8.0时还不是强制的,但9.1版本必须要有。
2. MySQL 9.1安装方案选择
2.1 官方RPM包 vs 源码编译
对于生产环境,我强烈建议使用官方RPM包安装。源码编译虽然灵活,但会面临以下问题:
- 缺少系统服务集成
- 依赖管理复杂
- 安全更新维护困难
通过以下命令获取官方RPM仓库:
sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el8-6.noarch.rpm2.2 启用MySQL 9.1仓库
默认情况下上述仓库只包含MySQL 8.0系列。需要手动启用9.1源:
sudo dnf config-manager --disable mysql80-community sudo dnf config-manager --enable mysql90-community验证仓库配置:
sudo dnf repolist enabled | grep mysql应该看到类似输出:
mysql90-community MySQL 9.1 Community Server3. 安装过程详解
3.1 执行安装命令
现在可以正式安装MySQL服务端和客户端:
sudo dnf install -y mysql-community-server mysql-community-client安装完成后检查版本:
mysqld --version预期输出:
mysqld Ver 9.1.0 for Linux on x86_64 (MySQL Community Server - GPL)3.2 初始化数据目录
MySQL 9.1采用了新的初始化方式:
sudo mysqld --initialize --user=mysql关键点说明:
- 默认数据目录是/var/lib/mysql
- 会生成临时root密码在error log中(通常位于/var/log/mysqld.log)
- 必须使用
--user=mysql参数确保文件权限正确
查看初始密码:
sudo grep 'temporary password' /var/log/mysqld.log输出示例:
[Note] [MY-010454] [Server] A temporary password is generated for root@localhost: JqkL12#sdfa3.3 启动MySQL服务
设置开机启动并立即启动服务:
sudo systemctl enable mysqld sudo systemctl start mysqld验证服务状态:
sudo systemctl status mysqld健康状态应该显示"active (running)"。
4. 安全配置与优化
4.1 运行安全向导
执行安全加固脚本:
sudo mysql_secure_installation按照提示操作:
- 输入之前获取的临时密码
- 设置新root密码(建议至少12位混合字符)
- 移除匿名用户
- 禁止root远程登录
- 移除test数据库
- 立即重载权限表
4.2 基础性能调优
编辑MySQL配置文件:
sudo vi /etc/my.cnf添加以下关键参数(适用于4核8G内存的服务器):
[mysqld] innodb_buffer_pool_size = 4G innodb_log_file_size = 256M max_connections = 200 thread_cache_size = 10 table_open_cache = 2000重启服务使配置生效:
sudo systemctl restart mysqld4.3 创建管理用户
建议不要直接使用root账户,而是创建专用管理账号:
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'StrongPassword123!'; GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES;5. 常见问题排查
5.1 服务启动失败排查
如果遇到服务启动失败,按以下步骤排查:
- 查看错误日志:
sudo tail -100 /var/log/mysqld.log- 常见错误及解决方案:
错误1:
Can't create/write to file '/var/run/mysqld/mysqld.pid'解决:sudo mkdir /var/run/mysqld && sudo chown mysql:mysql /var/run/mysqld错误2:
Table 'mysql.plugin' doesn't exist解决:执行sudo mysql_upgrade -u root -p
5.2 连接数问题
如果遇到Too many connections错误,临时解决方案:
SET GLOBAL max_connections = 300;永久解决方案是修改my.cnf中的max_connections参数并重启服务。
5.3 密码策略冲突
MySQL 9.1默认启用了强密码策略。如需调整:
SET GLOBAL validate_password.policy=LOW;但生产环境强烈不建议降低密码强度。
6. 高级配置建议
6.1 配置SSL加密
生成SSL证书和密钥:
sudo mysql_ssl_rsa_setup --uid=mysql验证SSL状态:
SHOW VARIABLES LIKE '%ssl%';6.2 审计日志配置
安装审计插件:
INSTALL PLUGIN audit_log SONAME 'audit_log.so';配置审计规则:
[mysqld] plugin-load-add=audit_log.so audit_log_format=JSON audit_log_policy=ALL6.3 备份策略设置
建议配置自动备份:
sudo crontab -e添加以下内容(每天凌晨2点全量备份):
0 2 * * * /usr/bin/mysqldump -u backupuser -p'password' --all-databases | gzip > /backup/mysql_$(date +\%Y\%m\%d).sql.gz记得提前创建备份用户:
CREATE USER 'backupuser'@'localhost' IDENTIFIED BY 'BackupPass123!'; GRANT SELECT, RELOAD, PROCESS, SHOW DATABASES ON *.* TO 'backupuser'@'localhost';7. 版本特性实践
MySQL 9.1引入了几个值得关注的新特性:
7.1 直方图统计信息
优化查询性能的新方法:
ANALYZE TABLE orders UPDATE HISTOGRAM ON customer_id, order_date;查看统计信息:
SELECT * FROM information_schema.column_statistics;7.2 JSON增强功能
新的JSON_VALUE函数:
SELECT JSON_VALUE('{"name": "John"}', '$.name');7.3 并行复制改进
配置组复制并行线程:
[mysqld] slave_parallel_workers = 8 slave_parallel_type = LOGICAL_CLOCK验证复制状态:
SHOW SLAVE STATUS\G在实际项目中,我发现这些新特性对处理大型电商平台的订单数据特别有效,可以将复杂查询的响应时间从秒级降到毫秒级。特别是在处理JSON格式的扩展属性时,9.1版本的性能提升非常明显。