前言
pt-table-checksum是一个在线验证主从数据一致性的工具,主要用于以下场景:
1. 数据迁移前后,进行数据一致性检查
2. 当主从复制出现问题,待修复完成后,对主从数据进行一致性检查
3. 把从库当成主库,进行数据更新,产生了"脏数据"
4. 定期校验
5.使用此工具前一定要安装 percona-toolkit,安装方法可以参考http://azhuang.blog.51cto.com/9176790/1588019博客
系统架构介绍:
主库IP:192.168.3.208
从库IP:192.168.3.10
1.建立权限(主从都建)

GRANT update,insert,delete,SELECT,PROCESS,SUPER,REPLICATION SLAVE ON *.* TO 'checksum'@'192.168.3.%' IDENTIFIED BY 'checksum123';
flush privileges;

2.查看需要操作的数据表

pt-table-checksum检查主从数据一致性,及修复主从数据完整性_第1张图片

3.查看主数据库表记录

pt-table-checksum检查主从数据一致性,及修复主从数据完整性_第2张图片

4.查看从数据库表记录

pt-table-checksum检查主从数据一致性,及修复主从数据完整性_第3张图片

5.主库生成checksum表

pt-table-checksum --host=192.168.3.208 --port=3306 --user=checksum --password=checksum123  --databases=test --create-replicate-table --replicate=test.checksums  --no-check-binlog-format  --nocheck-replication-filters

  # --databases=test test表示存放checksum表的数据库,--replicate=test.checksums  表示生成的表名

pt-table-checksum检查主从数据一致性,及修复主从数据完整性_第4张图片

6.主库生成checksum值

pt-table-checksum --host=192.168.3.208 --port=3306 --user=checksum --password=checksum123  --databases=liu --tables=user --create-replicate-table --replicate=test.checksums --no-check-binlog-format --nocheck-replication-filters

  #--databases=liu liu表示要检查的数据库名, --tables=user user表示要检查的表名,也可以只检查 数据库名。

wKioL1SPpCviGWEiAAD9x68Pb1Q533.jpg #此图的DIFFS值为1,表示主从数据不一致,如果为0,表示主从数据是一致的。出现问题的表为liu数据库的user表。

7.从库查看效果

select * from test.checksums where master_cnt <> this_cnt OR master_crc <> this_crc OR ISNULL(master_crc) <> ISNULL(this_crc) \G

pt-table-checksum检查主从数据一致性,及修复主从数据完整性_第5张图片   

#经过从库查看,他们的值不一样,说明主从数据不一致,如果执行从库查看数据为空,表示主从数据OK。

8.修复主从数据不一致 (master端执行)

pt-table-sync --print --sync-to-master h=192.168.3.10,P=3306,D=liu,t=user -uchecksum -pchecksum123

  #h=192.168.3.10 此IP为从库IP,打印要修复的数据(用于先测试看)

 wKioL1SPpc_DIqeUAAHpBErbXo8509.jpg

 #打印需要在从库修改的数据

pt-table-sync --execute --sync-to-master h=192.168.3.10,P=3306,D=liu,t=user -uchecksum -pchecksum123

 #真正执行修复数据(执行修复)

9.检查主从数据现在是否一致

pt-table-checksum检查主从数据一致性,及修复主从数据完整性_第6张图片

#经过修改,现在主从数据已经全部OK了。


备注:经过测试的数据表一定要有主键索引,否则测试不成功!