☰
RedHat 8系统安装与配置MySQL 9.1全指南
2026/10/26 16:53:08 网站建设 项目流程

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 firewalld

1.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.rpm

2.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 Server

3. 安装过程详解

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#sdfa

3.3 启动MySQL服务

设置开机启动并立即启动服务:

sudo systemctl enable mysqld sudo systemctl start mysqld

验证服务状态:

sudo systemctl status mysqld

健康状态应该显示"active (running)"。

4. 安全配置与优化

4.1 运行安全向导

执行安全加固脚本:

sudo mysql_secure_installation

按照提示操作:

  1. 输入之前获取的临时密码
  2. 设置新root密码(建议至少12位混合字符)
  3. 移除匿名用户
  4. 禁止root远程登录
  5. 移除test数据库
  6. 立即重载权限表

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 mysqld

4.3 创建管理用户

建议不要直接使用root账户,而是创建专用管理账号:

CREATE USER 'admin'@'localhost' IDENTIFIED BY 'StrongPassword123!'; GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES;

5. 常见问题排查

5.1 服务启动失败排查

如果遇到服务启动失败,按以下步骤排查:

  1. 查看错误日志:
sudo tail -100 /var/log/mysqld.log
  1. 常见错误及解决方案:
  • 错误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=ALL

6.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版本的性能提升非常明显。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询