阿里云 RDS MySQL 5.7 升级 8.0 前需要做哪些兼容性检查?

文章导读
阿里云 RDS MySQL 5.7 升级 8.0 前,必须通过控制台兼容性检查并结合 MySQL Shell 的 util.checkForServerUpgrade() 工具扫描 schema 变更。适用于双节点或三节点本地盘实例,风险边界在于保留关键字冲突、认证插件不兼容及已废弃参数导致启动失败。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
  7. 参考来源
A A

阿里云 RDS MySQL 5.7 升级 8.0 前,必须通过控制台兼容性检查并结合 MySQL Shell 的 util.checkForServerUpgrade() 工具扫描 schema 变更。适用于双节点或三节点本地盘实例,风险边界在于保留关键字冲突、认证插件不兼容及已废弃参数导致启动失败。

先说结论:阿里云 RDS 升级 5.7 到 8.0 需依赖控制台预检查与人工 SQL 扫描双重验证,不可直接跨大版本或降级。

  • 适合:双节点或三节点本地盘实例,单节点云盘版不支持。
  • 先看:控制台兼容性检查结果,有效期仅 24 小时,超时需重测。
  • 建议:提前修复 utf8mb3 字符集、保留关键字列名及旧版认证插件问题。

命令速用版

若具备远程连接权限,使用 MySQL Shell 执行深度检查,比控制台检查更细致:

./mysqlsh -uroot -p -S /tmp/mysql.sock -e "util.checkForServerUpgrade()" > upgrade_report.log

检查报告中出现 ERROR 级别条目必须修复,如 Usage of utf8mb3 charset 或 Column name is a reserved keyword。

为什么会这样

MySQL 8.0 移除了查询缓存功能,默认认证插件改为 caching_sha2_password,且数据字典结构发生变更。旧版配置参数如 query_cache_type 在 8.0 中已被移除,若配置文件中残留会导致实例启动失败。此外,8.0 新增了保留关键字,若表名或列名冲突会直接阻断升级流程。

分步处理

1. 数据备份:使用 mysqldump 或物理备份工具完整备份现有数据,这是恢复的最后保障。

阿里云 RDS MySQL 5.7 升级 8.0 前需要做哪些兼容性检查?

2. 控制台检查:在 RDS 控制台发起升级前兼容性检查,确保实例状态为运行中且无其他任务,检查结果有效时长为 24 小时。

3. 修复兼容项:根据检查报告修改字符集为 utf8mb4,重命名冲突的保留关键字列名,确认应用驱动支持 caching_sha2_password。

4. 执行升级:停止服务或直接在控制台点击升级,系统会自动检测并升级数据字典结构,8.0.16 以后不再需要手动运行 mysql_upgrade。

怎么验证是否生效

升级完成后登录数据库执行 SELECT VERSION() 确认版本号为 8.0.x,检查 @@sql_mode 是否包含 ONLY_FULL_GROUP_BY。验证应用程序连接池是否正常,特别是密码认证方式是否匹配。查看错误日志确认无 major 报错,特别是关于表损坏或权限系统变更的信息。

常见坑

1. 实例类型限制:单节点云盘版实例不支持升级引擎版本,仅支持双节点或三节点本地盘实例。

2. 降级不可逆:升级完成后不支持降级,旧版本备份集无法用于恢复新版本实例。

阿里云 RDS MySQL 5.7 升级 8.0 前需要做哪些兼容性检查?

3. 引擎兼容性:若原库含 MyISAM 表,8.0 默认禁用 MyISAM 引擎,启动会失败,需先转换为 InnoDB。

4. 配置残留:旧 my.cnf 里残留 query_cache_type 等已废弃参数,日志只报 unknown variable,排查极慢。

常见问题

升级后支持回退到 5.7 版本吗?

不支持,升级完成后旧版本的备份集无法用于恢复新版本实例,如需回档请选择实例升级后生成的备份集。

升级后还需要运行 mysql_upgrade 吗?

不需要,MySQL 8.0.16 以后 mysql_upgrade 已被弃用,数据字典升级由启动过程自动完成。

检查报告的有效期是多久?

阿里云 RDS 升级前兼容性检查结果有效时长为 24 小时,超过 24 小时后需要重新检查。

参考来源

  • MySQL 5.7 到 8.0 平滑迁移的环境搭建指南
  • 升级 MySQL 5.7 到 MySQL 8.0
  • mysql 5.7 如何平滑升级到 8.0_使用 mysqlcheck 工具检查兼容性与数据迁移