Write by lyc at 2018-11-22pt-table-checksum使用实践 
 
pt-table-checksum 
用于检测MySQL主、从库的数据是否一致。 
最重要的一点就是:要在主库上授权,能让主库ip访问。这一点不能忘记!(实验证明从库上可以不授权,但最好还是从库也授权)
根据测试,需要一个即能登录主库,也能登录从库的账号; 
只能指定一个host,必须为主库的IP; 
在检查时会向表加S锁; 
运行之前需要从库的同步IO和SQL进程是YES状态。 
 
 
 
1.添加授权用户 1 2 3 4 mysql > create user 'checksum' @'192.168.%.%' ; mysql > GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, PROCESS, SUPER, LOCK TABLES, REPLICATION SLAVE ON *.* TO 'checksum' @'192.168.%.%'  IDENTIFIED BY 'nzKmnfea9vap5lOksawETDbR' ; mysql > flush privileges; 
2.执行 pt-table-checksum 1 2 3 4 5 6 7 8 9 10 11 12 $ pt-table-checksum [OPTIONS] [DSN] $ pt-table-checksum --recursion-method="processlist"  \ --nocheck-replication-filters \ --no-check-binlog-format \ --replicate=test.checksums20190228 \ --create-replicate-table \ --databases=test  \ h=192.168.99.207,P=3306,u=checksum,p=nzKmnfea9vap5lOksawETDbR >> /root/checksum/run.log 
[OPTIONS] 常用参数解释: 
--nocheck-replication-filters     不检查复制过滤器,建议启用。后面可以用–databases来指定需要检查的数据库。--no-check-binlog-format          不检查复制的binlog模式,要是binlog模式是ROW,则会报错。--replicate=                      把checksum的信息写入到指定表中,建议直接写到被检查的数据库当中。--create-replicate-table          第一次检查会创建表--replicate-check-only            只显示不同步的信息。--databases=                      指定需要被检查的数据库,多个则用逗号隔开。不写检查所有库--tables=                         指定需要被检查的表,多个用逗号隔开,不加即检查整个库的所有表h=192.168.99.207                  连主库 
[DSN] 常用参数解释: 
h=      Master的地址u=      用户名p=      密码P=      端口 
3.检查结果分析 从结果可以看出不一致的表,及不一致的行数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 $ pt-table-checksum --recursion-method="processlist"  \ --nocheck-replication-filters \ --no-check-binlog-format \ --replicate=test.checksums_test_20201217 \ --create-replicate-table \ --databases=test  \ h=10.19.xxx.xxx,P=3306,u=checksum,p=nzKmnfea9vap5lOksawETDbR > /root/checksums_test_20201217.log Checking if  all tables can be checksummed ... Starting checksum ...             TS ERRORS  DIFFS     ROWS  DIFF_ROWS  CHUNKS SKIPPED    TIME TABLE 11-22T15:16:19      0      0   100000          0       4       0   0.789 test.sbtest1 11-22T15:16:19      0      0   100000          0       1       0   0.643 test.sbtest2 11-22T15:16:20      0      0   100000          0       1       0   0.647 test.sbtest3 11-22T15:16:20      0      1        1          4       1       0   0.029 test.tb1 11-22T15:16:20      0      0       10          0       1       0   0.026 test.test 
解释: 
TS          完成检查的时间。ERRORS      检查时候发生错误和警告的数量。DIFFS       0表示一致,1表示不一致。当指定–no-replicate-check时,会一直为0,当指定–replicate-check-only会显示不同的信息。ROWS        表的行数。DIFF_ROWS   不一致的行数CHUNKS      被划分到表中的块的数目。SKIPPED     由于错误或警告或过大,则跳过块的数目。TIME        执行的时间。TABLE       被检查的表名。