在新服务器导入备份文件,执行到一半报未知字符集,导入中断。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

sed -i 's/utf8mb4_0900_ai_ci/utf8mb4_general_ci/g' backup.sql
mysql -u root -p db < backup.sql

备份来自较新版本数据库,使用了旧版本不认识的字符集排序规则。这一点先确认清楚,后面就不用反复试。

「数据库导入字符集」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。

备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。

偶发问题先统计频率,一小时几次和一天一次,查法完全不同。改完顺手把文档补一句,省得下次自己重新推一遍。

具体做法是,确认目标库支持的字符集;在导出文件里替换排序规则;导入后统一转为目标字符集。

改完照着核一遍,导入完整执行,表结构与数据均正常。

作者 9823189