在MySQL主从复制过程中,常常需要对某些重要的表进行一致性检查。
由于主从数据在同步时存在一定的延迟,因此直接读取服务器数据的方式无法严格保证信息的一致性。在数据在同步完全结束之前,一直处于不断变化且并不完整的状态下。锁表的可能实现这个问题,但是性能又是需要考虑的。能对数据验证是最好的。MySQL的CHECKSUM TABLE指令对于小型列表来说完全够用,但规模庞大的列表往往需要“分块”处理,避免在校验过程中造成负载过高。
Percona工具Pt-table-checksum 是不锁表的。
基本语法:
Pt-table-checksum [options] [DSN]
举例:
pt-table-checksum--databases=monster --tables=abc --replicate-checkh=192.168.1.186,u=chk,p=XXXX,P=3308
这个工具是通过在master上执行一些 checksum queries 主要是使用CRC32函数来实现 可以参考 --funcion 参数,这个是最易于计算的,来检查主从复制的一致性,并将结果打印。如果主从数据不一样的话,会产生不一样的结果。
缺点:可能会增加服务器负载。
--explain 选项的时候,可以查看到工具是如何校验数据表的。
该工具在master上执行一些 checksum queries ,然后会复制到slave上。
同一时间它只会在一个表上进行操作,所以不会在开始之前做大量的工作,也不许积累太多的内存。
它能够在较大型的表上快速工作的原因是: it divides each table into