
pt-table-checksum
pt-table-checksum是⼀个基于MySQL数据库主从架构在线数据⼀致性校验⼯具。其⼯作原理
在主库上运⾏, 通过对同步的表在主从段执⾏checksum, 从⽽判断数据是否⼀致。在校验完
毕时,该⼯具将列出与主库存在差异的对象结果。
原理
在主库执⾏基于statement的sql语句来⽣成主库数据块的checksum,把相同的sql语句传递到
从库执⾏,并在从库上计算相同数据块的checksum,最后,⽐较主从库上相同数据块的
checksum值,由此判断主从数据是否⼀致。检测过程根据唯⼀索引将表按row切分为块
(chunk),以为单位计算,可以避免锁表。检测时会⾃动判断复制延迟、 master的负载,
超过阀值后会⾃动将检测暂停,减⼩对线上服务的影响。
pt-table-checksum 默认情况下可以应对绝⼤部分场景,官⽅说,即使上千个库、上万亿的
⾏,它依然可以很好的⼯作,这源⾃于设计很简单,⼀次检查⼀个表,不需要太多的内存和多
余的操作;必要时,pt-table-checksum 会根据服务器负载动态改变 chunk ⼤⼩,减少从库的
延迟。
为了减少对数据库的⼲预,pt-table-checksum还会⾃动侦测并连接到从库,当然如果失败,
可以指定—recursion-method选项来告诉从库在哪⾥。它的易⽤性还体现在,复制若有延迟,
在从库 checksum 会暂停直到赶上主库的计算时间点(也通过选项—设定⼀个可容忍的延迟最
⼤值,超过这个值也认为不⼀致)
步骤:
1.连接到主库:pt⼯具连接到主库,然后⾃动发现主库的所有从库。默认采⽤show full
processlist来查找从库,但是这只有在主从实例端⼝相同的情况下才有效。
3.查找主库或者从库是否有复制过滤规则:这是为了安全⽽默认检查的选项。你可以关闭这个
检查,但是这可能导致checksum的sql语句要么不会同步到从库,要么到了从库发现从库没有
要被checksum的表,这都会导致从库同步卡库。
5.开始获取表,⼀个个的计算。
6.如果是表的第⼀个chunk,那么chunk-size⼀般为1000;如果不是表的第⼀个chunk,那么
采⽤19步中分析出的结果。
7.检查表结构,进⾏数据类型转换等,⽣成checksum的sql语句。
8.根据表上的索引和数据的分布,选择最合适的split表的⽅法。
9.开始checksum表。
10.默认在chunk⼀个表之前,先删除上次这个表相关的计算结果。除⾮–resume。
14.根据explain的结果,判断chunk的size是否超过了你定义的chunk-size的上限。如果超过
了,为了不影响线上性能,这个chunk将被忽略。
相关文档
评论