pt-table-checksum是percona-toolkit工具集中的一种工具,是percona-toolkit的子命令,它是一个在线验证主从数据一致性的工具。
pt-table-checksum应用场景:
pt-table-checksum原理:
pt-table-checksum通过在主库上执行检查语句,在线检查MySQL复制的一致性,生成replace语句,然后传递到从库,再通过update更新master_src的值。默认情况下,pt-table-checksum会自动发现并连接所有从库,通过检测从库的this_src和master_src的值从而判断主从数据是否一致。pt-table-checksum有两种checksum值的计算。
pt-table-checksum工具先检查表的结构,并且获取表中每一列的数据类型,把所有数据类型都转化为字符串,使用concat_ws()函数进行连接,然后使用crc32计算出该行的checksum值。
如果一行一行去计算checksum值,再去和从库比较,效率会很低。pt-table-checksum可以利用表中的索引,将表的数据split成一个个chunk,计算的时候也是以chunk为单位。pt-table-checksum引入了聚合函数BIT_XOR()。它的功能可以理解为将这个chunk内的所有行数据拼接起来,再计算CRC32的值,就得到了这个chunk的checksum值。当pt-table-checksum工具在计算主库上某一个chunk的checksum值时,主库可能还在更新,为了保证checksum是同一份数据,需要对该chunk加for update锁。