pt-table-checksum – 检查MySQL主从数据一致性

2,591 total views, 3 views today

pt-table-checksum用于在线检测MySQL主从一致性,其原理是在主库执行checksum查询,然后与从库进行结果的比对,从而得出是否一致性的报告。

pt-table-checksum checksum每张表,然后得出每个从库的一致性报告。pt-table-checksum 工具只关注数据的不一致,修复数据一致性需要用到 pt-table-sync 工具。

用法:

 

原理:
pt-table-checksum 连接指定的主库,然后查找数据库和表(如果指定了过滤条件,则按过滤条件查找)。它同一时间只checksum 一张表,所以不会消耗过多的内存和资源。对于大数据库的数据库来说,这是一个非常有用的设计,无论数据库有多大,比如一个server中有几百个数据库和表,数万亿(trillions)的行,我们都无需担心,pt-table-checksum都可以胜任。

可以胜任的原因是, pt-table-checksum 将每张表都拆分成行块(chunks of rows),默认是1000行。然后对每个行块使用单独的REPLACE…SELECT 进行checksum 查询。行块(chunks of rows)大小随着设定的–chunk-time 时间(默认0.5秒)动态调节。每次 checksum 查询执行完毕后,下次checksum 查询会根据上次执行的时间调整 行块(chunks of rows)大小,也就是通过学习系统的负载情况来调节行块大小。  如果不设定 –chunk-time ,行块大小则不会自动调整。这样就不会形成一个大的checkum 查询操作,确保了主从复制不会产生大的延迟或者负载。

pt-table-checksum 利用索引来排序,从而将表拆分成多个行块(最好是主键或者唯一键)。如果没有索引,但是表中只有少量数据,pt-table-checksum 可以将该表直接拆分成一个行块进行checksum 查询。建议MySQL中每张表都有主键,如果表很大没有主键、唯一键、索引,那么会产生如下错误

最好创建一个专门用于checksum的用户,它需要有连接到从库的权限。

如果pt-table-checksum 在主库连接不到从库会报错

只检查cnail一个库数据是否一致,使用–databases参数

检查所有库是否一致

只打印输出数据不一致的表,会显示具体是哪个从库的哪个表不一致。

参数说明:

结果输出情况

输出内容介绍:

 

案例:模拟主从数据不一致
在从库中删除10条记录,使主从不一致

然后进行checksum
方式1:输出所有表,注意观察DIFFS列,如果不为0,则表示数据不一致。

方式2:推荐!由于表数据量众多,所有表都输出,让人无所适从。还好有  –replicate-check-only 参数,只输出不一致的表的信息。

输出结果说明:

修复一致性,需要用到 pt-table-sync 工具,在下篇文章会介绍。
更多pt-toolkit详细使用方法,请点击这里。

 

发表评论

必填项已用*标注