博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pt-table-checksum和pt-table-sync的用法总结
阅读量:6510 次
发布时间:2019-06-24

本文共 2800 字,大约阅读时间需要 9 分钟。

在网上有好多关于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

转载地址:http://uidfo.baihongyu.com/

你可能感兴趣的文章
创建镜像iso文件
查看>>
Linux下创建软RAID5和RAID10实战
查看>>
mariadb的日志
查看>>
C++类的存储
查看>>
ActiveReports 报表应用教程 (8)---交互式报表之动态过滤
查看>>
解决使用Handler时Can't create handler inside thread that has not called Looper.prepare()
查看>>
跟我一起学docker(四)--容器的基本操作
查看>>
磁化强度
查看>>
C/C++ 数据范围
查看>>
LVS+keepalived+nginx
查看>>
monkey如何通过uiautomatorviewer的bounds坐标点击控件
查看>>
第22章,mysql数据库-1
查看>>
【亲测】教你如何搭建 MongoDB 复制集 + 选举原理
查看>>
虚拟化网络技术
查看>>
阿里云中间件推出全新开发者服务
查看>>
56.随机产生的id重复问题
查看>>
一个快速检测系统CPU负载的小程序
查看>>
java.lang.IllegalArgumentException: No bean specified
查看>>
Wireshark and Tcpdump tips
查看>>
第一课 计算机及操作系统基础知识
查看>>