环境
mysql 主从(主5.6 从5.7)
问题
在主库(5.6) 使用的mysqldump导出数据, 并导入到mysql 5.7
mysqldump --single-transaction --master-data=2
然后使用checksum table 校验每张表的hash值, 发现有张表校验值主从不一致, 但行数是一样的, 只有这一张表不一致.
再使用Mysqldump 导出主5.6 和 从5.7 的数据, 然后使用diff比较, 发现是一致的....
分析
mysql导出导入的, 行数一致, 基本上就确定是字符集方向的问题了.
使用pt-table-checksum 校验得到 一个有问题的数据区间.
然后再使用脚本逐行校验该区间的数据, 得到不一致的数据行ID
查找相关数据, 发现 一个varchar字段的数据有个4字节的字符... (emjo), 但是在从库(5.7)上发现是乱码...
故推断为导出时的字符集问题, 重新导出数据, 导出时加上参数: --default-character-set=utf8mb4
mysqldump --single-transaction --master-data=2 --default-character-set=utf8mb4
然后导入从库, 再次校验数据, 数据就一致了
总结
导出的时候注意加上字符集.
其实导入的时候 还遇到个小问题, 就是只导入那一行数据, 但那一行数据又有时间字段, 我又把TIME_ZONE之类的删除掉了. 导致导入进去的数据 差了8小时... 所以导入的时候也要注意 TIME_ZONE 之类的, 其实还有外键的问题, 不过这些mysql的dump文件都是有写的, 别删了就行.