必须用逻辑备份+重装方式迁移MySQL;Rocky Linux 9的MySQL RPM包已适配新环境,含mysqlx默认启用、query_cache禁用等配置变更。

不能直接升级系统再启动MySQL服务——CentOS 7的MySQL 5.7/8.0二进制包与Rocky Linux 9的glibc 2.34、systemd 252、libcrypto 3等运行时环境不兼容,强行启动会报undefined symbol或Failed to start MySQL Server错误。
必须用逻辑备份+重装方式迁移MySQL
原地升级操作系统后保留旧MySQL RPM包是高危操作。Rocky Linux 9官方仓库中MySQL版本(5.7.41+、8.0.36+)已针对新内核和库链重新编译,且默认启用mysqlx端口、禁用query_cache,配置项语义也有变化。
- 数据量 mysqldump导出全库,注意加
--single-transaction --routines --triggers --events保证一致性 - 数据量 ≥ 100GB:改用
mysqlpump(MySQL 5.7.8+)或mydumper(支持多线程),避免单线程锁表太久 - 务必在导出前执行
SET GLOBAL innodb_fast_shutdown = 0,确保InnoDB缓冲区刷盘干净 - 导出时显式指定字符集:
mysqldump --default-character-set=utf8mb4 -u root -p ...,防止目标端因init_connect或collation_server差异导致乱码
目标端安装MySQL必须匹配源端主版本号
Rocky Linux 9默认启用mysql80模块流(stream),但如果你源端是MySQL 5.7,不能直接dnf install mysql-server——它会拉取MySQL 8.0。必须显式启用5.7流:
解析 MySQL 8.0 的 DDL 脚本,并将表结构导出为 Excel 格式。适用于用户需将 MySQL 的 `CREATE TABLE` 语句转换为结构化的 Excel 文件场景,导出内容包含字段名、数据类型、长度及精度等信息。支持多张表的批量处理,每张表对应 Excel 中的一个独立工作表。适用于数据库文档编写、数据字典生成及模式分析等任务。
- 查看可用流:
dnf module list mysql→ 找到mysql:5.7那行 - 启用并安装:
dnf module enable mysql:5.7 && dnf install mysql-server - 若需MySQL 8.0,确认应用已适配
caching_sha2_password认证插件,否则客户端连接会失败 - 安装后不要立即
systemctl start mysqld,先校验/etc/my.cnf.d/mysql-default-authentication-plugin.cnf是否覆盖了default_authentication_plugin设置
还原后必须验证lower_case_table_names与文件系统大小写行为
CentOS 7上若设了lower_case_table_names=1,而Rocky Linux 9默认XFS文件系统是大小写敏感的,MySQL启动时不会报错,但后续建表或查询可能因大小写不一致静默失败。
- 还原前检查源端值:
SELECT @@lower_case_table_names; - 目标端
/etc/my.cnf中必须显式写入该参数,且只能在初始化数据库前设置(即首次mysqld --initialize之前) - 若源端为
1,目标端也必须为1,且不能在已有数据后修改——否则ALTER TABLE会失败 - 验证方法:
mysql -e "CREATE TABLE TestTable(id INT); SHOW TABLES LIKE 'testtable';",应返回结果才表示生效
迁移后最关键的三项启动后检查
即使mysqld进程起来、netstat -tlnp | grep :3306看到端口监听,也不代表MySQL真正就绪。以下三步漏掉任意一项,业务连接就会超时或报错:
- 执行
mysql -u root -p -e "SELECT 1;"确认能通过socket本地登录(排除bind-address或skip-networking误配) - 检查
journalctl -u mysqld -n 50 -p 3是否有Can't open and lock privilege tables类错误——这通常意味着mysql系统库未正确初始化或权限损坏 - 运行
mysqlcheck -u root -p --all-databases --check-upgrade,它会提示哪些表需要ALTER TABLE ... UPGRADE PARTITIONING或REPAIR TABLE
最易被忽略的是mysql系统库的兼容性——Rocky Linux 9的MySQL 5.7.41自带的mysql_upgrade工具必须在还原完逻辑备份后手动运行一次,否则权限视图、存储过程定义可能残留旧格式,在高并发下引发元数据锁争用。

















