前言
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.查看需要操作的数据表
3.查看主数据库表记录
4.查看从数据库表记录
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 表示生成的表名
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表示要检查的表名,也可以只检查 数据库名。
#此图的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
#经过从库查看,他们的值不一样,说明主从数据不一致,如果执行从库查看数据为空,表示主从数据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,打印要修复的数据(用于先测试看)
#打印需要在从库修改的数据
pt-table-sync --execute --sync-to-master h=192.168.3.10,P=3306,D=liu,t=user -uchecksum -pchecksum123
#真正执行修复数据(执行修复)
9.检查主从数据现在是否一致
#经过修改,现在主从数据已经全部OK了。
备注:经过测试的数据表一定要有主键索引,否则测试不成功!