注:pt-table-checksum和pt-table-sync默认支持基于语句的复制,不支持基于行的复制,相关BUG如下
https://bugs.launchpad.net/percona-toolkit/+bug/899415
注:在binlog格式为row的情况下,如下这样完成数据的同步任务(在主库上执行):
pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --replicate=test.checksum --databases=dbname h=localhost,u=xxx,p=xxxxx,P=3306 -S /data/mysqldata1/sock/mysql.sock
此语句执行完成后,会在test数据库中创建checksum表,并且在表中插入数据同步的情况。
参数意义:
--nocheck-replication-filters :不检查复制过滤器,建议启用。后面可以用--databases来指定需要检查的数据库。
--no-check-binlog-format : 不检查复制的binlog模式,要是binlog模式是ROW,则会报错。
--replicate-check-only :只显示不同步的信息。
--replicate= :把checksum的信息写入到指定表中,建议直接写到被检查的数据库当中。
--databases= :指定需要被检查的数据库,多个则用逗号隔开。
--tables= :指定需要被检查的表,多个用逗号隔开
h=127.0.0.1 :Master的地址
u=root :用户名
p=123456 :密码
P=3306 :端口
当检查后发现数据有不一致的情况,最好先对不同步的数据先进行验证,方法如下:
pt-table-sync --replicate=test.checksums h=10.xx.xx.xx,u=xxx,p=xxxxxx,P=3306 -d dbname -t tbname --print > xxxxx.txt
先通过输出sql的方式把对应的sql输出到对应的文件中,然后同时检查主库和从库的数据,验证数据是否一致,如果主库和从库数据不一致,使用下面的语句进行同步。
注:在(从库服务器)上执行
pt-table-sync --replicate=test.checksums h=10.xx.xx.xx,u=xxx,p=xxxxxx,P=3306 -d dbname -t tbname --execute
注:在数据同步过程中,尽量不要整个库同步,最后是验证一个表,同步一个表。