mysqldump --compatible=mysql40 --default-character-set=utf8mb4 db > b.sql
# 或导入前替换
# utf8mb4_0900_ai_ci -> utf8mb4_general_ci

从 MySQL 8 导出的备份导入 5.7,第一条建表语句就报排序规则未知,整个导入中断。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,utf8mb4_0900_ai_ci 是 8.0 引入的排序规则,5.7 及以下版本不认识。

「MySQL 排序规则不兼容」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。改完隔一天再看一次,当场正常不代表能稳住。

测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。

日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。权限不要一口气开到最大,先加到够用再往上试,范围小才好收。

处理上按这个顺序:导出时指定兼容的排序规则;导入前统一替换语句中的排序规则;确认字符集仍是 utf8mb4。

改完只确认一件事:导入过程无报错,表结构与数据行数与源库一致。

作者 9823189