pt-table-checksum和pt-table-sync的用法总结

在网上有好多关于pt-table-checksum和pt-table-sync的文章,详细介绍了工作原理和各个常用参数的详细信息,但是根据别人的贴的命令做测试的时候问题会遇到各种报错,由于公司线上环境经常会出现主从不一致的情况,所以把这些命令整理出来,以方便查阅。(这些命令在测试库上测试过,在线上跑过,目前没有发现问题,如果大家发现有问题的地方请留言,谢谢!)


写在前面:测试的时候主从统一用默认的3306端口,避免从库发现不了的问题

    授权一定要到位,从库一定要记得授权

    认真看错误提示,弄不清楚状况的时候打开debugPTDEBUG=1

    192.168.6.85为主,其它ip为从

    h=192.168.6.85,u=checksums,p=checksums 中间一定不能有空格,不然会报错,本人排查这个错误花了很长时间

    

一:sakila库的film_actor表的数据检测与同步

1,在主库和从库上面添加用户:

GRANT SELECT, PROCESS, SUPER, REPLICATION SLAVE ON *.* TO 'checksums'@'192.168.6.85' IDENTIFIED BY 'checksums';


2.检测sakila库的film_actor表的数据主从是否一致

PTDEBUG=1 pt-table-checksum --no-check-binlog-format --no-check-replication-filters --recursion-method=processlist --replicate=test.checksums --databases=sakila --tables=film_actor -h 192.168.6.85 -P3306 -u checksums -p checksums


3,根据checksum的结果恢复所有从库的film_actor数据

PTDEBUG=1 pt-table-sync --replicate=test.checksums --recursion-method=processlist --database=sakila   --tables=film_actor --port=3306 h=192.168.6.85,u=checksums,p=checksums --print --execute



------------------------------------------------------------------------------------------------------------------------------

二:检测tmp库数据是否一致

pt-table-checksum --no-check-binlog-format --no-check-replication-filters --recursion-method=processlist --replicate=test.checksums --databases=tmp  -h 192.168.6.85 -P3306 -u checksums -p checksums


1,根据checksum的结果恢复所有从库的数据

PTDEBUG=1 pt-table-sync --replicate=test.checksums --recursion-method=processlist --no-check-triggers --no-check-child-tables --no-foreign-key-checks --port=3306 h=192.168.6.85,u=checksums,p=checksums --print --execute

(有外键约束要加参数 --no-check-child-tables --no-foreign-key-checks,不然可能把子表所有的数据都删除掉)

(--no-check-triggers,不检测触发器)

2,根据checksum的结果只恢复192.168.6.91的数据

pt-table-sync --print  --execute --replicate=test.checksums --sync-to-master h=192.168.6.91,u=checksums,p=checksums



3,恢复从库192.168.6.91的数据(这个从库所有的数据都和主保持一致,除了系统表和checksums表)

pt-table-sync --execute --print --sync-to-master h=192.168.6.91,u=checksums,p=checksums



----------------------------------------------------------------------------------------------------------------------------

执行完pt-table-sync后可再执行一次pt-table-checksum检测主从数据是否一致,可以执行下面的sql语句,如果结果为空则说明主从数据一致

select * from test.checksums where master_cnt<>this_cnt OR master_crc<>this_crc OR ISNULL(master_crc)<>ISNULL(this_crc);



问题总结:

1,在恢复数据的时候有出来过只能恢复部份从库的情况,我的操作方法是把输出的语句保存在一个文本里面,然后直接贴到没有正常恢复的从库去执行。

2,--chunk-size-limit默认设置为2,当遇到行数多的大表时pt-table-checksum可能会跳过不检测,提示:

Skipping table db.table because on the master it would be checksummed in one chunk but on these replicas it has too many rows:

  355085 rows on asddb.xxx

The current chunk size limit is 239358 rows (chunk size=119679 * chunk size limit=2.0).

此时可以根据输出的提示将--chunk-size-limit适当调大一点。


本文转自 emma_cql 51CTO博客,原文链接:http://blog.51cto.com/chenql/1708079

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值