生产环境MySQL大版本升级必须采用迁移升级而非就地升级,即通过新实例部署、数据迁移与流量切换实现,确保旧库持续可用,规避就地升级导致的系统表损坏与元数据不一致风险。

直接回答:不建议跳过检查直接升级,in-place 升级虽可行,但生产环境更推荐先备份、再卸载重装 MySQL 8.0,避免残留配置或权限兼容问题导致服务异常。
升级前必须跑 util.checkForServerUpgrade() 检查兼容性
MySQL Shell 的 util.checkForServerUpgrade() 不是可选项,是强制前置动作。它会扫描 20+ 项潜在风险,比如:
• NO_AUTO_CREATE_USER 出现在 sql_mode 中(MySQL 8.0 已废弃)
• 使用 MyISAM 或 MEMORY 引擎的表(8.0 系统表全为 InnoDB,且升级校验会失败)
• 表名/列名/存储过程名撞上 MySQL 8.0 新增保留字(如 rank、json)
• RocksDB 分区表(不支持直接升级)
检查结果有效期仅 24 小时,超时需重跑;若发现 error 级问题,必须修复后才能继续。
卸载 MySQL 5.7 时最容易漏掉 /var/lib/mysql 外的残留
单纯 yum remove mysql\* 或 apt purge mysql\* 并不彻底:
• /etc/my.cnf 和 /etc/my.cnf.d/ 通常残留,影响新版本启动参数加载
• /var/log/mysqld.log 若存在,可能被新实例复用并写入错误日志路径
• /usr/share/mysql 下的字符集文件、错误消息模板可能干扰初始化
• CentOS 上 mysql57-community-release 包必须显式卸载,否则 yum install mysql-server 仍拉取 5.7
执行完卸载命令后,务必运行 rpm -qa | grep -i mysql(RHEL/CentOS)或 dpkg -l | grep mysql(Ubuntu),确认无输出。
安装 MySQL 8.0 后必须手动处理认证插件和 sql_mode
MySQL 8.0 默认使用 caching_sha2_password 插件,但很多老客户端(如 Navicat 12 以下、旧版 PHP mysqlnd)不支持,连接会报错 Authentication plugin 'caching_sha2_password' cannot be loaded:
• 启动后立即执行:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
• 或在 my.cnf 中加一行:default_authentication_plugin=mysql_native_passwordsql_mode 也需调整:MySQL 8.0 默认不含 NO_AUTO_CREATE_USER,若原配置含该值,mysqld 启动会失败。建议清空 sql_mode 或显式设为 8.0 兼容值,例如:sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
数据导入后必须验证 utf8mb4 字符集是否真正生效
MySQL 8.0 默认字符集是 utf8mb4,但 mysqldump 导出的 SQL 文件默认不带 CHARACTER SET utf8mb4 声明,直接 mysql -u root -p 可能让表/列沿用 5.7 的 <code>latin1 或 utf8:
• 检查单个表:SHOW CREATE TABLE your_table; 看 DEFAULT CHARSET 和各字段 COLLATE
• 批量修正:ALTER DATABASE your_db CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;,再对每张表执行 ALTER TABLE ... CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
特别注意:utf8mb4_0900_ai_ci 是 8.0 默认校对规则,比旧版 utf8mb4_general_ci 更准确,但排序行为有细微差异,业务 SQL 中若有 ORDER BY 依赖旧规则,需回归测试。
实际升级最耗时的环节不是执行命令,而是验证——包括应用连通性、查询逻辑是否因窗口函数语法变化或 HASH JOIN 优化而产生结果偏差,这些没法靠脚本自动覆盖。留出足够时间做灰度验证,比追求“一键升级”更重要。


















