pt-table-checksum

参考:
http://www.percona.com/doc/percona-toolkit/2.1/pt-table-checksum.html
https://bugs.launchpad.net/percona-toolkit/+bug/919499
http://www.cr173.com/html/23093_1.html


环境信息:双主架构(master-master)
percona-toolkit版本信息:2.2.6
1.下载地址:
http://www.percona.com/downloads/percona-toolkit/LATEST/deb/
2.安装:
yum  –y  perl-DBI  perl-DBD-MySQL  perl-TermReadKey
tar xzvf percona-toolkit-2.2.6.tar.gz
cd percona-toolkit-2.2.6
perl Makefile.pl
make && make install


3.在使用pt-table-checksum前,需要准备如下几点工作
(1) 访问主库的帐户,需要同时能访问备库;
(2) 如果主库的binlog格式是Row,在使用pt-table-checksum时,需要使用使用-no-check-binlog-format参数;
root@localhost : (none) 04:22:48> show variables like 'binlog_format';
 binlog_format | ROW 
(3) host必须是主库的对应的IP
(4) 运行之前需要从库的同步IO和SQL进程是YES状态


4.pt-table-checksum的使用:
(1)在使用pt-table-checksum时报如下错误
Can't locate Time/HiRes.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at bin/pt-table-checksum line 7660.
BEGIN failed--compilation aborted at bin/pt-table-checksum line 7660.
原因:缺少依赖文件HiRes.pm
解决方法:把系统光盘作为yum源,直接安装HiRes即可。
yum -y install perl-Time-HiRes


5.参数说明:
pt-table-checksum  --nocheck-replication-filters  --no-check-binlog-format --replicate=test.checksum --databases=core --tables=ttt_last_sync_0 h=localhost,u=admin,p=XXXX,P=4108 -S /var/data2/mysqldata8/sock/mysql.sock --recursion-method=processlist
执行完表的一致性检查看,会在--replicate对应的库中创建checksum表,数据会直接写入到checksum表中。
 TS ERRORS  DIFFS     ROWS  CHUNKS SKIPPED    TIME TABLE
09-18T12:03:16      0      1        8       1       0   0.018 fnbl_core.fnbl_last_sync_0


TS            :完成检查的时间。
ERRORS        :检查时候发生错误和警告的数量。
DIFFS         :0表示一致,1表示不一致。当指定--no-replicate-check时,会一直为0,当指定--replicate-check-only会显示不同的信息。
ROWS          :表的行数。
CHUNKS        :被划分到表中的块的数目。
SKIPPED       :由于错误或警告或过大,则跳过块的数目。
TIME          :执行的时间。
TABLE         :被检查的表名。
参数意义:
--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         :端口
更多的参数请见官网,上面指出来的是常用的,对该场景够用的参数。
通过DIFFS是1可以看出主从的表数据不一致。通过查看从库上的test.checksum表可以看到主从库的检验信息。


错误1:
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.

原因:主库日志为row格式,在使用pt-table-checksum时没有指定--no-check-binlog-format选项;


错误2:
06-07T16:54:23 User does not have all privileges on --replicate table `test`.`checksums`.

原因:test.checksums已经存在,需要手工删除




你可能感兴趣的:(pt-table-checksum)