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
被检查的表名。