MySQL升级需逐级进行(如5.7→8.0→8.1),规避语法变化、默认行为调整、弃用功能移除三类风险;须提前检查兼容性、分阶段灰度升级,并重点适配认证插件、密码策略、JSON索引等关键变更。
MySQL 升级时的版本兼容问题,核心在于语法变化、默认行为调整、弃用功能移除这三类风险。不做好兼容性评估和过渡安排,容易导致应用报错、查询结果异常甚至服务中断。
MySQL 官方不支持跨大版本直接升级(如 5.7 → 8.0),必须逐级升级(5.7 → 8.0 → 8.1)。同时注意:

在正式升级前,用工具和人工方式识别潜在冲突:
STRICT_TRANS_TABLES 和 ONLY_FULL_GROUP_BY(8.0 默认开启),在旧版本中提前测试,暴露松散 SQL 的隐患CREATE TEMPORARY TABLE ... TYPE=MyISAM(应改用 ENGINE)、GROUP BY 隐式排序、无引号的保留字作列名等避免全量一次性切换,降低故障影响面:
mysqldump --no-data --all-databases > schema_backup.sql,并记录 SELECT VERSION(), @@sql_mode, @@default_authentication_plugin;
mysql_upgrade(若需要)、重启验证这些改动极易引发隐性故障,需重点适配:
caching_sha2_password,老客户端(如 MySQL 5.7 客户端、部分 JDBC 驱动)可能连接失败;解决方法:升级驱动、或创建用户时显式指定 IDENTIFIED WITH mysql_native_password
default_password_lifetime = 0 可关闭,或定期调用 ALTER USER ... PASSWORD EXPIRE NEVER
CREATE INDEX ON t (doc->"$.field"),升级后建议重构以提升性能mysql 库的 InnoDB 表,不再支持 MyISAM;升级后勿直接操作这些表,统一用 GRANT/CREATE USER
不复杂但容易忽略。关键是把兼容检查做在升级前,把验证做在切流前,把回滚方案写在升级脚本里。