☰
RedHat 8系统安装MySQL 9.1数据库全攻略
2026/10/28 13:22:16 网站建设 项目流程

1. 项目概述

在RedHat 8系统上安装MySQL 9.1数据库服务是一个典型的企业级数据库部署场景。作为目前最流行的开源关系型数据库之一,MySQL 9.1版本带来了诸多性能优化和新特性,包括增强的JSON支持、改进的窗口函数、更好的GIS功能等。而RedHat 8作为企业级Linux发行版,其稳定性和安全性使其成为数据库服务器的理想选择。

这个安装过程看似简单,但实际操作中会遇到不少坑点。比如RedHat 8默认使用dnf包管理器而非yum,系统自带的MariaDB可能与MySQL产生冲突,SELinux安全策略可能导致服务启动失败等。本文将基于我多年在Linux环境下部署MySQL的经验,带你一步步避开这些陷阱。

2. 环境准备

2.1 系统要求检查

在开始安装前,我们需要确认系统满足MySQL 9.1的基本要求:

# 查看系统版本 cat /etc/redhat-release # 检查内存和存储空间 free -h df -h # 检查CPU架构 uname -m

MySQL 9.1对系统的最低要求是:

  • 内存:至少2GB(生产环境建议8GB以上)
  • 磁盘空间:至少5GB可用空间
  • 操作系统:RedHat 8或兼容系统(x86_64架构)

提示:如果是在虚拟机环境测试,建议分配至少4GB内存和20GB磁盘空间,否则性能测试时可能会遇到瓶颈。

2.2 卸载冲突软件包

RedHat 8默认安装了MariaDB,这是MySQL的一个分支,可能会与MySQL产生冲突。我们需要先移除这些包:

# 检查已安装的MariaDB相关包 rpm -qa | grep mariadb # 卸载MariaDB sudo dnf remove mariadb-server mariadb-client mariadb-common -y # 清理残留文件和目录 sudo rm -rf /var/lib/mysql/ sudo rm -rf /etc/my.cnf*

3. 安装MySQL 9.1

3.1 添加MySQL官方仓库

MySQL官方提供了针对RedHat系列的YUM仓库,我们需要先配置这个仓库:

# 下载MySQL YUM仓库安装包 sudo dnf install https://dev.mysql.com/get/mysql80-community-release-el8-4.noarch.rpm -y # 启用MySQL 9.1仓库 sudo dnf module disable mysql -y sudo dnf config-manager --enable mysql91-community

3.2 安装MySQL服务器

现在可以正式安装MySQL 9.1服务器了:

# 安装MySQL服务器和客户端 sudo dnf install mysql-community-server mysql-community-client -y # 验证安装 rpm -qi mysql-community-server

安装完成后,MySQL服务会自动创建mysql用户和组,并设置好必要的目录结构:

  • 配置文件:/etc/my.cnf
  • 数据目录:/var/lib/mysql
  • 日志文件:/var/log/mysqld.log
  • 套接字文件:/var/lib/mysql/mysql.sock

3.3 启动MySQL服务

使用systemctl管理MySQL服务:

# 启动MySQL服务 sudo systemctl start mysqld # 设置开机自启 sudo systemctl enable mysqld # 检查服务状态 sudo systemctl status mysqld

4. 初始配置

4.1 获取临时密码

MySQL 9.1在首次安装后会生成一个临时root密码:

# 查看临时密码 sudo grep 'temporary password' /var/log/mysqld.log

输出类似:

2023-07-20T03:12:34.123456Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: Abc123!@#

4.2 安全配置向导

使用mysql_secure_installation脚本进行基本安全配置:

sudo mysql_secure_installation

按照提示操作:

  1. 输入临时密码
  2. 设置新密码(需满足复杂度要求)
  3. 移除匿名用户
  4. 禁止root远程登录
  5. 移除测试数据库
  6. 重新加载权限表

注意:MySQL 9.1默认启用了密码强度验证插件,新密码必须包含大小写字母、数字和特殊字符,长度至少8位。

4.3 防火墙配置

如果系统启用了firewalld,需要开放MySQL默认端口3306:

# 添加防火墙规则 sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent sudo firewall-cmd --reload # 验证端口开放 sudo firewall-cmd --list-ports

5. 高级配置

5.1 调整MySQL配置文件

编辑/etc/my.cnf文件进行性能调优:

[mysqld] # 基础配置 datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock # 内存配置 innodb_buffer_pool_size = 1G # 建议为系统内存的50-70% key_buffer_size = 256M query_cache_size = 0 # MySQL 8.0+已弃用查询缓存 # 日志配置 log_error=/var/log/mysqld.log slow_query_log=1 slow_query_log_file=/var/log/mysql-slow.log long_query_time=2 # 连接配置 max_connections=200 wait_timeout=300 interactive_timeout=300 # 其他优化 default_authentication_plugin=mysql_native_password character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci

修改配置后需要重启MySQL服务:

sudo systemctl restart mysqld

5.2 创建管理用户

不建议直接使用root账户进行日常操作,应该创建专用管理用户:

-- 登录MySQL mysql -u root -p -- 创建管理员用户 CREATE USER 'admin'@'localhost' IDENTIFIED BY 'Complex@Password123!'; GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES;

6. 验证安装

6.1 基本功能测试

-- 创建测试数据库 CREATE DATABASE test_db; USE test_db; -- 创建测试表 CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL, email VARCHAR(100) NOT NULL UNIQUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- 插入测试数据 INSERT INTO users (username, email) VALUES ('user1', 'user1@example.com'), ('user2', 'user2@example.com'); -- 查询数据 SELECT * FROM users;

6.2 性能基准测试

可以使用sysbench进行简单性能测试:

# 安装sysbench sudo dnf install sysbench -y # 准备测试数据 sysbench oltp_read_write --db-driver=mysql --mysql-user=admin --mysql-password='Complex@Password123!' --mysql-db=test_db prepare # 运行测试 sysbench oltp_read_write --db-driver=mysql --mysql-user=admin --mysql-password='Complex@Password123!' --mysql-db=test_db --threads=4 --time=60 run

7. 常见问题解决

7.1 安装失败问题排查

问题1:依赖冲突

Error: Package: mysql-community-server-9.1.0-1.el8.x86_64 (mysql91-community) Requires: libssl.so.1.1()(64bit)

解决方案:

sudo dnf install openssl1.1 -y

问题2:SELinux阻止服务启动

检查SELinux状态:

sudo sestatus

临时解决方案(生产环境不推荐):

sudo setenforce 0

永久解决方案:

sudo semanage port -a -t mysqld_port_t -p tcp 3306 sudo restorecon -Rv /var/lib/mysql

7.2 连接问题

问题:客户端无法连接

检查网络连接和权限:

-- 在MySQL中检查用户权限 SELECT host, user FROM mysql.user; -- 检查绑定地址 SHOW VARIABLES LIKE 'bind_address';

如果bind_address是127.0.0.1,需要修改为0.0.0.0(注意安全风险):

[mysqld] bind-address = 0.0.0.0

7.3 性能问题

问题:查询速度慢

检查慢查询日志:

sudo less /var/log/mysql-slow.log

在MySQL中分析查询:

-- 启用查询分析 SET profiling = 1; -- 运行你的查询 SELECT * FROM large_table WHERE condition; -- 查看分析结果 SHOW PROFILE;

8. 维护与监控

8.1 日常维护命令

-- 检查运行状态 SHOW STATUS; -- 检查变量设置 SHOW VARIABLES; -- 检查进程列表 SHOW PROCESSLIST; -- 检查表状态 CHECK TABLE table_name; -- 优化表 OPTIMIZE TABLE table_name;

8.2 备份与恢复

使用mysqldump进行备份:

# 全库备份 mysqldump -u admin -p --all-databases --single-transaction > full_backup.sql # 单库备份 mysqldump -u admin -p test_db > test_db_backup.sql

恢复数据库:

mysql -u admin -p < full_backup.sql

8.3 监控设置

安装MySQL企业监控器或使用开源的Prometheus + Grafana方案:

# 安装MySQL exporter用于Prometheus wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.14.0/mysqld_exporter-0.14.0.linux-amd64.tar.gz tar xvfz mysqld_exporter-*.tar.gz cd mysqld_exporter-* # 创建监控用户 mysql -u root -p -e "CREATE USER 'exporter'@'localhost' IDENTIFIED BY 'ExporterPassword123!' WITH MAX_USER_CONNECTIONS 3; GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost'; FLUSH PRIVILEGES;" # 启动exporter ./mysqld_exporter --config.my-cnf=.my.cnf

9. 升级与卸载

9.1 升级MySQL版本

# 先备份数据 mysqldump -u admin -p --all-databases --single-transaction > upgrade_backup.sql # 停止MySQL服务 sudo systemctl stop mysqld # 安装新版本 sudo dnf upgrade mysql-community-server

9.2 完全卸载MySQL

# 停止服务 sudo systemctl stop mysqld # 卸载软件包 sudo dnf remove mysql-community-server mysql-community-client -y # 删除数据文件和配置文件 sudo rm -rf /var/lib/mysql/ sudo rm -rf /etc/my.cnf* sudo rm -rf /var/log/mysqld.log

10. 最佳实践与经验分享

在实际生产环境中部署MySQL 9.1时,我总结了以下几点经验:

  1. 内存配置:innodb_buffer_pool_size不宜设置过大,否则可能导致系统OOM。建议不超过物理内存的70%,并保留足够内存给操作系统和其他服务。

  2. 连接管理:max_connections参数需要根据应用特点调整。过高的值会消耗更多内存,通常200-500对于大多数应用已经足够。

  3. 监控指标:必须监控的关键指标包括:

    • QPS/TPS
    • 连接数
    • 慢查询数量
    • 缓冲池命中率
    • 复制延迟(如果使用主从)
  4. 备份策略:除了定期全量备份外,还应该:

    • 启用二进制日志(binlog)实现时间点恢复
    • 测试备份恢复流程
    • 考虑使用Percona XtraBackup进行热备份
  5. 安全加固:

    • 定期轮换密码
    • 限制管理用户的白名单IP
    • 启用SSL连接
    • 定期审计用户权限
  6. 性能调优:

    • 使用EXPLAIN分析慢查询
    • 合理添加索引(避免过度索引)
    • 考虑使用连接池
    • 对大表考虑分区策略
  7. 高可用方案:

    • 对于关键业务,建议部署MySQL组复制(Group Replication)或InnoDB Cluster
    • 使用ProxySQL实现读写分离
    • 考虑多活架构设计
  8. 版本管理:

    • 保持小版本更新(如9.1.x)
    • 大版本升级前充分测试
    • 关注官方发布的安全公告

在实际操作中,我发现很多问题都源于配置不当或对MySQL工作机制理解不深。建议花时间深入学习InnoDB存储引擎的工作原理,这对性能调优和故障排查都有极大帮助。

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

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

立即咨询