1. 环境准备与系统检查
在Rocky Linux 9.6上安装MySQL 8.0.32之前,我们需要确保系统环境满足基本要求。Rocky Linux作为RHEL的替代发行版,其软件包管理与CentOS高度兼容,但仍有几个关键点需要注意:
首先确认系统版本:
bash复制cat /etc/redhat-release
预期输出应显示"Rocky Linux release 9.6"。如果系统版本低于9.x,建议先升级系统,因为MySQL 8.0对glibc等基础库有特定版本要求。
内存和存储检查:
bash复制free -h
df -h /var
MySQL 8.0推荐至少2GB内存,/var分区建议保留10GB以上空间(因为默认数据目录在/var/lib/mysql)。对于生产环境,这些数值需要根据实际数据量进行调整。
关键依赖检查:
bash复制rpm -q libaio numactl-libs
这两个包是MySQL运行的必要依赖,如果未安装可以通过以下命令安装:
bash复制dnf install libaio numactl-libs -y
注意:Rocky Linux 9默认启用了SELinux,这可能导致MySQL初始化失败。建议先设置为permissive模式:
bash复制setenforce 0 sed -i 's/^SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 获取MySQL 8.0.32 RPM包
MySQL官方提供了多种RPM包获取方式,我们将使用最稳定的MySQL Yum Repository方式安装。这种方法相比直接下载RPM包的优势在于能自动处理依赖关系,并方便后续升级。
添加MySQL官方Yum仓库:
bash复制rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el9-4.noarch.rpm
验证仓库是否添加成功:
bash复制dnf repolist enabled | grep mysql
应该能看到mysql80-community和mysql-tools-community两个仓库被启用。
有时候我们需要安装特定小版本(如8.0.32而非最新的8.0.x),这时需要临时禁用仓库的自动更新:
bash复制dnf config-manager --disable mysql80-community
dnf config-manager --enable mysql80-community
查看可用版本:
bash复制dnf list available mysql-community-server --showduplicates
在输出中找到8.0.32版本的全称(如mysql-community-server-8.0.32-1.el9.x86_64),然后执行指定版本安装。
3. 安装MySQL服务器
执行完整安装命令:
bash复制dnf install mysql-community-server-8.0.32 mysql-community-client-8.0.32 \
mysql-community-libs-8.0.32 mysql-community-common-8.0.32
安装完成后验证:
bash复制rpm -qi mysql-community-server
确认Version字段显示8.0.32,且所有相关包版本一致,避免混合版本导致兼容性问题。
初始化MySQL数据目录:
bash复制mysqld --initialize --user=mysql
这个步骤会生成临时root密码,务必记录最后一行输出的密码:
code复制[Note] [MY-010454] [Server] A temporary password is generated for root@localhost: JqkL12#sdfa
重要提示:如果初始化时看到"error while loading shared libraries"错误,通常是缺少依赖库。可以通过
ldd /usr/sbin/mysqld检查缺失的库,然后用dnf安装对应包。
4. 配置与启动MySQL服务
调整MySQL配置文件:
bash复制vim /etc/my.cnf
基础配置建议:
ini复制[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
# 性能相关配置
innodb_buffer_pool_size=1G # 建议为物理内存的50-70%
max_connections=200
character-set-server=utf8mb4
collation-server=utf8mb4_0900_ai_ci
启动MySQL服务并设置开机自启:
bash复制systemctl start mysqld
systemctl enable mysqld
检查服务状态:
bash复制systemctl status mysqld
正常应该显示"active (running)"。如果启动失败,查看日志定位问题:
bash复制journalctl -xe -u mysqld
5. 安全加固与初始设置
使用初始密码登录:
bash复制mysql -uroot -p
修改root密码(密码需包含大小写字母、数字和特殊字符):
sql复制ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';
执行安全加固脚本:
bash复制mysql_secure_installation
这个交互式脚本会引导你完成以下操作:
- 设置root密码强度验证策略
- 移除匿名用户
- 禁止root远程登录
- 移除测试数据库
- 重新加载权限表
创建管理用户(可选):
sql复制CREATE USER 'admin'@'%' IDENTIFIED BY 'AdminPass123!';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
安全建议:生产环境中应该限制'%'通配符的使用,改为指定IP或IP段。同时考虑设置防火墙规则:
bash复制firewall-cmd --permanent --add-service=mysql firewall-cmd --reload
6. 验证安装与基础测试
验证MySQL版本:
sql复制SELECT VERSION();
应返回"8.0.32"。
创建测试数据库:
sql复制CREATE DATABASE testdb;
USE testdb;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE
);
INSERT INTO users (username, email) VALUES ('testuser', 'test@example.com');
SELECT * FROM users;
检查存储引擎:
sql复制SHOW ENGINES;
确认InnoDB是默认引擎(DEFAULT显示YES)。
性能基准测试(可选):
bash复制mysqlslap --user=root --password --concurrency=50 --iterations=10 \
--auto-generate-sql --number-of-queries=1000
7. 常见问题排查
问题1:安装时出现"Public key for mysql-community-server-8.0.32.rpm is not installed"
解决方法:
bash复制rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023
问题2:服务启动失败,日志显示"Could not create unix socket lock file /var/lib/mysql/mysql.sock.lock"
这通常是SELinux或权限问题:
bash复制chown -R mysql:mysql /var/lib/mysql
restorecon -Rv /var/lib/mysql
问题3:客户端连接时报错"caching_sha2_password cannot be loaded"
MySQL 8.0默认使用新的认证插件,旧客户端可能不支持:
sql复制ALTER USER 'username'@'host' IDENTIFIED WITH mysql_native_password BY 'password';
问题4:忘记root密码
停止MySQL服务后以跳过授权表方式启动:
bash复制systemctl stop mysqld
mysqld_safe --skip-grant-tables &
mysql -uroot
然后执行密码修改,最后重启正常服务。
8. 性能优化建议
-
缓冲池配置:
ini复制innodb_buffer_pool_size = 4G # 对于8G内存的服务器 innodb_buffer_pool_instances = 4 -
日志文件优化:
ini复制innodb_log_file_size = 256M innodb_log_buffer_size = 64M -
连接管理:
ini复制thread_cache_size = 50 table_open_cache = 4000 -
监控设置:
sql复制INSTALL COMPONENT "file://component_mysqlx"; SET GLOBAL performance_schema=ON; -
定期维护:
bash复制
mysqlcheck -u root -p --all-databases --optimize
对于生产环境,建议使用MySQL Enterprise Monitor或Percona Monitoring and Management等工具进行深度监控。
9. 备份与恢复策略
基础备份方法:
bash复制mysqldump -u root -p --all-databases > full_backup.sql
定时备份脚本示例:
bash复制#!/bin/bash
DATE=$(date +%Y%m%d)
BACKUP_DIR="/backup/mysql"
mysqldump -u backupuser -p'password' --all-databases | gzip > $BACKUP_DIR/full_$DATE.sql.gz
find $BACKUP_DIR -type f -name "*.gz" -mtime +30 -delete
二进制日志备份(增量备份):
ini复制[mysqld]
log-bin=mysql-bin
expire_logs_days=7
恢复流程:
- 停止MySQL服务
- 删除原数据目录
- 初始化新数据目录
- 恢复完整备份
- 应用二进制日志
10. 升级与迁移考虑
小版本升级(如8.0.32→8.0.33):
bash复制dnf update mysql-community-server
systemctl restart mysqld
大版本升级(如5.7→8.0)建议:
- 先在测试环境验证
- 使用mysql_upgrade工具
- 检查所有存储程序、触发器的兼容性
- 验证应用程序连接
从其他数据库迁移:
- 使用MySQL Workbench的迁移向导
- 对于Oracle迁移,考虑使用MySQL Shell的util.loadDump工具
- 对于大数据量迁移,建议使用mydumper/myloader工具
我在实际运维中发现,Rocky Linux 9.6与MySQL 8.0.32的组合在稳定性方面表现优异,特别是在高并发场景下。一个常被忽视的配置是innodb_flush_neighbors=0,在SSD存储上禁用这个特性可以提升约15%的IO性能。另外,定期执行ANALYZE TABLE能显著优化查询计划准确性,特别是在数据频繁变更的环境中。
