5.7→8.0不能直接替换二进制,必须逻辑迁移或严格验证:涉及数据字典重构、认证插件切换(需改mysql_native_password)、sql模式收紧、字符集默认变更(需全量转utf8mb4),mysqldump须加--skip-definer等参数,否则导入报错。

直接回答:5.7 → 8.0 不是“替换二进制就能跑”,必须做逻辑迁移或严格验证的 in-place 升级
MySQL 官方虽支持从 5.7.9+(GA 版)直接升级到 8.0.x,但这是有前提的:数据字典重构、认证插件切换、SQL 模式收紧、字符集默认变更——四项叠加,让“原地升级”极易在启动后报错、连接失败、查询崩溃。生产环境强烈建议走 mysqldump 逻辑迁移;若必须 in-place,请先用 util.checkForServerUpgrade() 扫出所有隐患点,一个都不能跳过。
导出时用对 mysqldump 参数,否则导入 8.0 会报语法错误
5.7 的 mysqldump 默认可能带 DEFINER 子句、NO_AUTO_CREATE_USER 权限语法,而这些在 8.0 已被移除,直接导入会卡在 ERROR 1227 (42501) 或 ERROR 1064。
mysqldump --no-defaults -u root -p --all-databases --routines --triggers --events --set-gtid-purged=OFF --skip-definer > backup.sql- 务必加
--skip-definer:避免导出DEFINER=`user`@`host`,8.0 不认这个写法 - 不加
--single-transaction也可,但若库中有 MyISAM 表,需确认业务能接受非一致性快照 - 导出后快速检查:
grep -n "NO_AUTO_CREATE_USER\|DEFINER" backup.sql,有就删掉或手动替换
导入后连不上?大概率是 caching_sha2_password 认证插件在作祟
5.7 用户用的是 mysql_native_password,8.0 新建用户默认用 caching_sha2_password——老 PHP(mysqlnd 5.0.12 以下)、旧 Python MySQLdb、甚至某些 JDBC 驱动会直接报 Authentication plugin 'caching_sha2_password' cannot be loaded。
- 登录 8.0 后立刻执行:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_pwd'; - 所有业务用户都要改:
SELECT user, host, plugin FROM mysql.user;,对plugin = 'caching_sha2_password'的逐个执行ALTER USER ... IDENTIFIED WITH mysql_native_password - 配置文件里加一行:
default_authentication_plugin=mysql_native_password,防止后续新建用户再踩坑
查数据时发现排序乱了、中文变问号?别急着 rollback,先看字符集
5.7 默认 latin1 + latin1_swedish_ci,8.0 默认 utf8mb4 + utf8mb4_0900_ai_ci。如果表/列没显式指定字符集,升级后 SHOW CREATE TABLE 会显示新默认值,但原有数据仍按老规则存——导致 ORDER BY 结果突变、模糊查询失准、甚至插入时报 Incorrect string value。
- 升级前扫一遍:
SELECT table_schema, table_name, column_name, character_set_name FROM INFORMATION_SCHEMA.COLUMNS WHERE character_set_name NOT IN ('utf8mb4', NULL); - 核心表优先转:
ALTER TABLE tbl CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci; - 配置文件必须设:
character-set-server=utf8mb4和collation-server=utf8mb4_0900_ai_ci,否则新创建的库/表还会沿用旧默认
真正麻烦的不是改配置,而是应用层 SQL 里硬编码了 CONVERT(... USING latin1) 或依赖 utf8(即 utf8mb3)的行为——这些得代码里一处处找出来修。










