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

因为utf8mb4支持更多的字符,所以一般都使用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就挺好用了。从两端跑出来结果,一对比却是不一样的。捣鼓了半天,终于发现玄机。这里直接公布答案。

为了方便描述,现将主从不一致结果放到一个库中展示:

c661be92889c2129d4fc466ccbcea8a1.png

虽然,查询结果看着是一样的,但却是不一样的数据。

对应的表结构:

3c7d3091445f3f24da460c3789133fee.png

这里看到表的字符集是utf8mb4。对应的字符集设置:

42b5776286ac48ee4178e8621250b834.png

发现客户端的字符集和表的字符集是不一致的。修改客户端字符集后再查看:

999713f81c24824656d9e55f2e4d5787.png

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

回去看备份文件:

9ee9b8b7393d32d24119a223fec444a9.png

备份的连接用的是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'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值