pt-table-checksum:主要用来检查主从数据是否一致,原理即在主库执行把表每行的列通过concat函数进行拼接,然后对拼接的值进行hash,并把该动作通过binlog传递到从库,从而在从库上也执行相关操作,主库上表完成checksum操作后,会等待所有从库对该表完成checksum,然后比对主从库上该表checksum值是否一致来判断数据是否一致。 pt-table-checksum主库要检查的表在从库都存在,并且同主库表有相同的表结构。如果要检查的表在从库不存在,或者表结构同主库不一致,那么对该表的checksum会破坏从库复制线程(3.4版本需要手动设置binlog_format=statement,工具才会检查到数据不一致)。
主库及从库创建检查用户
./pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --replicate=bhs.checksum --create-replicate-table --databases bhs -h 192.168.56.108 -u checkq -p 123456 -P 3306 --recursion-method=processlist --empty-replicate-table
TS ERRORS DIFFS ROWS CHUNKS SKIPPED TIME TABLE
11-20T23:39:14 0 1 0 1 0 0.487 bhs.pp
11-20T23:39:14 0 1 2 1 0 0.288 bhs.test
11-20T23:39:14 0 0 0 1 0 0.296 bhs.tt
--replicate-check-only 找到与主库数据不一致的从库
./pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --replicate=bhs.checksum --create-replicate-table --databases bhs -h 192.168.56.108 -u checkq -p 123456 -P 3306 --replicate-check-only
Differences on slv2
TABLE CHUNK CNT_DIFF CRC_DIFF CHUNK_INDEX LOWER_BOUNDARY UPPER_BOUNDARY
bhs.pp 1 -1 1
bhs.test 1 -1 1
--ignore-databases 忽略检查指定数据库
--ignore-tables 忽略检查指定表
只检查指定表
./pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --replicate=bhs.checksum --create-replicate-table --databases=bhs --tables=pp -h 192.168.56.108 -u checkq -p 123456 -P 3306 --recursion-method=processlist --empty-replicate-table
TS ERRORS DIFFS ROWS CHUNKS SKIPPED TIME TABLE
11-21T10:13:55 0 1 2 1 0 0.293 bhs.pp