备份文件用编辑器打开中文全是问号,导回测试库之后内容也是乱码,业务表里看着却正常。

排查方向其实有限,先把可能性排一排。导出时使用了默认字符集,与库不一致;客户端连接字符集没有指定;导入时又按另一种字符集解析。

上来先确认库和表的字符集

mysql -e 'show create database 库名'

指定字符集导出

mysqldump --default-character-set=utf8mb4 库名 > /data/bak.sql

再往下检查备份文件编码

file -i /data/bak.sql

末了导入时同样指定字符集

mysql --default-character-set=utf8mb4 库名 < /data/bak.sql

这台环境是别人交接的,不少默认值被动过,只能一项项核。

同事提醒我看一下最近一次发布,时间点确实对得上。

别只看报错消失,验证要多做一步。备份文件中文正常,导入后内容与源库一致。

这里还有个坑。导出和导入两端都要指定字符集,只改一边等于用两种编码解释同一份字节,看着是乱码其实是解码错了。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。

作者 9823189