percona-toolkit中 pt-table-checksum的使用

percona-toolkit中 pt-table-checksum的使用


为了减少对数据库的干预,pt-table-checksum还会自动侦测并连接到从库,当然如果失败,可以指定--recursion-method选项来告诉从库在哪里。它的易用性还体现在,复制若有延迟,在从库 checksum 会暂停直到赶上主库的计算时间点(也通过选项--设定一个可容忍的延迟最大值,超过这个值也认为不一致)。


注意:第一次运行的时候需要加上--create-replicate-table参数,生成checksums表!!如果不加这个参数,那么就需要在对应库下手工添加这张表了,表结构SQL如下:


常用参数解释:
--nocheck-replication-filters :不检查复制过滤器,建议启用。后面可以用--databases来指定需要检查的数据库。
--no-check-binlog-format : 不检查复制的binlog模式,要是binlog模式是ROW,则会报错。
--replicate-check-only :只显示不同步的信息。
--replicate= :把checksum的信息写入到指定表中,建议直接写到被检查的数据库当中。
--databases= :指定需要被检查的数据库,多个则用逗号隔开。
--tables= :指定需要被检查的表,多个用逗号隔开
h= :Master的地址
u= :用户名
p=:密码
P= :端口




分别在主库和从库授权:
在主库执行授权(一定要对主库  *ip*   授权,授权的用户名和密码可以自行定义,不过要保证这个权限能同时登陆主库和从库)
mysql> GRANT SELECT, PROCESS, SUPER, REPLICATION SLAVE,CREATE,DELETE,INSERT,UPDATE ON *.* TO 'root'@'192.168.1.101' identified by '123456';
mysql> flush privileges;


在从库上执行授权
mysql> GRANT SELECT, PROCESS, SUPER, REPLICATION SLAVE ON *.* TO 'root'@'192.168.1.101' IDENTIFIED BY '123456';
mysql> flush privileges;


但是后续也有报错,因为主库没有创建表的权限。所以我后面又给主库所有的权限。




这是模板命令:
[root@master-server ~]# pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --replicate=huanqiu.checksums --create-replicate-table --databases=huanqiu --tables=haha h=192.168.1.101,u=root,p=123456,P=3306


这是我的命令,其实是差不多的。
pt-table-checksum h='10.10.10.110',u='checksums',p='111111',P=3306,S=/tmp/mysql_3306.sock -d xuning --nocheck-binlog-format --recursion-method=hosts --nocheck-replication-filters --replicate=xuning.checksums
命令要注意,关于数据库的是没有-的,每个参数都以‘,’结尾。


报错处理:


----------
Diffs cannot be detected because no slaves were found.  Please read the --recursion-method documentation for information.
----------


show slave hsots;
mysql> show slave hosts ;
+-----------+------+------+-----------+--------------------------------------+
| Server_id | Host | Port | Master_id | Slave_UUID                           |
+-----------+------+------+-----------+--------------------------------------+
|         2 |      | 3308 |         1 | d087ea99-5cda-11e8-aaad-000c2940422b |
+-----------+------+------+-----------+--------------------------------------+
1 row in set (0.02 sec)
发现是空的,因为我是一个机器上测试的两个实例做的主从。所以没有识别到。
添加参数 --recursion-method=hosts解决。


----------
Replica mysql-test-01 has binlog_format ROW which could cause pt-table-checksum to break replication.  Please read "Replicas using row-based replication" in the LIMITATIONS section of the tool's documentation.  If you understand the risks, specify --no-check-binlog-format to disable this check.
----------


因为主从开启了binlog-format开启了row复制。
添加--nocheck-binlog-format解决。


----------
[root@mysql-test-01 local]# pt-table-checksum h='10.10.10.110',u='checksums',p='111111',P=3306,S=/tmp/mysql_3306.sock --nocheck-binlog-format --recursion-method=hosts --nocheck-replication-filters
Checking if all tables can be checksummed ...
Starting checksum ...
DBD::mysql::db do failed: Access denied for user 'checksums'@'10.10.10.110' to database 'percona' [for Statement "CREATE DATABASE IF NOT EXISTS `percona` /* pt-table-checksum */"] at /usr/bin/pt-table-checksum line 11876.
05-29T11:29:17 --replicate database percona does not exist and it cannot be created automatically.  You need to create the database.


----------
主库要有创建表的权限。
所以后来给主库添加了创建的权限。




展示的结果:


[root@mysql-test-01 local]# pt-table-checksum h='10.10.10.110',u='checksums',p='111111',P=3306,S=/tmp/mysql_3306.sock -d test --nocheck-binlog-format --recursion-method=hosts --nocheck-replication-filters  --create-replicate-table
Checking if all tables can be checksummed ...
Starting checksum ...
            TS ERRORS  DIFFS     ROWS  DIFF_ROWS  CHUNKS SKIPPED    TIME TABLE
05-29T11:49:48      0      0        1          0       1       0   0.129 test.csz
Checksumming test.sbtest1:  95% 00:01 remain
05-29T11:50:56      0      0  1159821          0      16       0  68.104 test.sbtest1
05-29T11:51:14      0      0  1000000          0      10       0  18.023 test.sbtest2
05-29T11:51:29      0      0  1000000          0       9       0  15.018 test.sbtest3
05-29T11:51:44      0      0  1000000          0       9       0  14.770 test.sbtest4
05-29T11:51:58      0      0  1000000          0       9       0  14.505 test.sbtest5
[root@mysql-test-01 local]# 


解释:
TS :完成检查的时间。
ERRORS :检查时候发生错误和警告的数量。
DIFFS :0表示一致,1表示不一致。当指定--no-replicate-check时,会一直为0,当指定--replicate-check-only会显示不同的信息。
ROWS :表的行数。
CHUNKS :被划分到表中的块的数目。
SKIPPED :由于错误或警告或过大,则跳过块的数目。
TIME :执行的时间。
TABLE :被检查的表名。


参考链接:https://www.cnblogs.com/kevingrace/p/6261091.html








pt-table-sync
同步:
第一个账号是主,第二个账号是从  建议 使用--print打印并不执行。直接执行会出问题 




pt-table-sync --replicate=xuning.t0529 h='10.10.10.110',u='jiaxuning',p='111111',S=/tmp/mysql_3306.sock h='10.10.10.110',u='jiaxuning',p='111111',S=/tmp/mysql_3308.sock  --replicate=xuning.checksums --print




pt-table-sync --replicate=xuning.t0529 h='10.10.10.110',u='jiaxuning',p='111111',P=3306 h='10.10.10.110',u='jiaxuning',p='111111',P=3308  --print



你可能感兴趣的:(percona-toolkit中 pt-table-checksum的使用)