这个用于检查mysql主从复制的一致性的工具,原理即在主库执行把表每行的列通过concat函数进行拼接,然后对拼接的值进行hash,并把该动作通过binlog传递到从库,从而在从库上也执行相关操作(pt-table-checksum会自动设置所在会话的binlog_format=statment)。默认主库上每对一个表完成checksum操作后,会等待所有从库对该表完成checksum,然后比对主从库上该表checksum值是否一致来判断数据是否一致。
首先要先在主库上安装percona-toolkit,安装教程在我转载的博客里面有
使用方法,主库地址(172.17.0.1)
root@fde550e69c2a:/usr/local/src/percona-toolkit-3.0.2# pt-table-checksum --nocheck-replication-filters --replicate=rep_test.checksums --no-check-binlog-format h=172.17.0.1,u=root,p=123456,P=3306
--nocheck-replication-filters :不检查复制过滤器,建议启用。后面可以用--databases来指定需要检查的数据库。
--no-check-binlog-format : 不检查复制的binlog模式,要是binlog模式是ROW,则会报错。
--replicate-check-only :只显示不同步的信息。 --replicate= :把checksum的信息写入到指定表中,建议直接写到被检查的数据库当中。
--databases= :指定需要被检查的数据库,多个则用逗号隔开。
--tables= :指定需要被检查的表,多个用逗号隔开 h=172.17.0.1 :
--replicate:检查结果插入到rep_test表中
root@fde550e69c2a:/# pt-table-checksum --nocheck-replication-filters --replicate=rep_test.checksums --no-check-binlog-format h=172.17.0.1,u=root,p=123456,P=3306
TS ERRORS DIFFS ROWS CHUNKS SKIPPED TIME TABLE
08-28T08:51:50 0 0 0 1 0 0.284 mysql.columns_priv
08-28T08:51:50 0 0 2 1 0 0.028 mysql.db
08-28T08:51:50 0 0 0 1 0 0.041 mysql.event
08-28T08:51:51 0 0 0 1 0 0.262 mysql.func
08-28T08:51:51 0 0 40 1 0 0.274 mysql.help_category
08-28T08:51:51 0 0 619 1 0 0.274 mysql.help_keyword
08-28T08:51:52 0 0 1273 1 0 0.264 mysql.help_relation
08-28T08:51:52 0 0 585 1 0 0.270 mysql.help_topic
08-28T08:51:52 0 0 0 1 0 0.263 mysql.ndb_binlog_index
08-28T08:51:52 0 0 0 1 0 0.266 mysql.procs_priv
08-28T08:51:53 0 1 2 1 0 0.268 mysql.proxies_priv
08-28T08:51:53 0 0 0 1 0 0.266 mysql.servers
08-28T08:51:53 0 0 0 1 0 0.263 mysql.tables_priv
08-28T08:51:53 0 0 1820 1 0 0.278 mysql.time_zone
08-28T08:51:54 0 0 0 1 0 0.265 mysql.time_zone_leap_second
08-28T08:51:54 0 0 1820 1 0 0.270 mysql.time_zone_name
08-28T08:51:55 0 0 123770 4 0 0.655 mysql.time_zone_transition
08-28T08:51:55 0 0 9537 1 0 0.271 mysql.time_zone_transition_type
08-28T08:51:55 0 1 3 1 0 0.272 mysql.user
上面diffs为0表示一直,1表示不一致