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

相关文章
|
存储 关系型数据库 MySQL
|
SQL 关系型数据库 MySQL
pt-tools系列:pt-online-schema-change 最佳实践
pt的详细步骤 Step 1: Create the new table. Step 2: Alter the new, empty table. This should be very quick, or die if the user specified a bad alter statement.
5056 0
|
关系型数据库 MySQL
pt-table-checksum原理详解
环境 MySQL: MySQL 5.6.27 OS: centos 6.6 tool: pt-table-checksum 2.2.15 它能做什么 业界最流行的MySQL主从数据对比工具,数据一致性检测最好的的工具,没有之一 如何使用 ./pt-table-che
7489 0
|
7月前
|
关系型数据库 MySQL
mysql 5.5.62版本建表语句报错: Index column size too large. The maximum column size is 767 bytes
mysql 5.5.62版本建表语句报错: Index column size too large. The maximum column size is 767 bytes
269 0
|
关系型数据库
PG/GP limit...offset...实现机制
PG/GP limit...offset...实现机制
119 0
|
关系型数据库 数据库 索引
pt-table-checksum
pt-table-checksum是目前可以说是最好的查看主从一致性的工具 先来个使用例子,有助快速上手使用 在主库执行:mysql>GRANT SELECT, PROCESS, SUPER, REPLICATION SLAVE,CREATE,DELETE,INSERT,UPDATE ON .
1714 0
|
关系型数据库 MySQL
pt-table-sync 使用介绍
pt-table-sync 使用介绍
2890 0