您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

MySQL因字符集导致主从数据不一致

bubuko 2022/1/25 20:05:48 mysql 字数 2482 阅读 807 来源 http://www.bubuko.com/infolist-5-1.html

MySQL 5.7客户端字符集不一致导致新建从库数据不一致
因为[utf8mb4](https://dev.mysql.com/doc/refman/5.7/en/charset-unicode-utf8mb4.html)支持更多的字符,所以一般都使用utf8mb4字符集。在MySQL 8.0中默认字符集就已经是utf8mb4了。但是,在MySQL 5.7中,默认的字符集还是utf8。而这接下来的一切,正是在5.7中发生的。 最近接了个任务,因为机房需要搬迁,需要迁移数据库。为了减少停机时间,通过主从切换方式进行。而又因为需要合并服务器,又采用了多源复制的手段。掂量了一下,觉得还是逻辑备份的方式方便。说干就干,先导出数据:`mysqldump -u root -p‘123456‘ --single-transaction --events --triggers --routines --master-data=2 --databases db1 db2 db3 --result-file=‘a001.sql‘`。导入数据后需校验一下数据,`checksum table`就挺好用了。从两端跑出来结果,一对比却是不一样的。捣鼓了半天,终于发现玄机。这里直接公布答案。

为了方便描述,现将主从不一致结果放到一个库中展示:
MySQL因字符集导致主从数据不一致
虽然,查询结果看着是一样的,但却是不一样的数据。

对应的表结构:
MySQL因字符集导致主从数据不一致

这里看到表的字符集是utf8mb4。对应的字符集设置:
MySQL因字符集导致主从数据不一致

发现客户端的字符集和表的字符集是不一致的。修改客户端字符集后再查看:
MySQL因字符集导致主从数据不一致

此时,就可以看到数据是不一样的。

回去看备份文件:
MySQL因字符集导致主从数据不一致

备份的连接用的是utf8。

至此结案。接下来再备份导入看看效果mysqldump -u root -p‘123456‘ --single-transaction --default-character-set=utf8mb4 --events --triggers --routines --master-data=2 --databases db1 db2 db3 --result-file=‘a001.sql‘

MySQL因字符集导致主从数据不一致

原文:https://blog.51cto.com/geamover/2478075


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶