1.安装依赖
yum install perl-IO-Socket-SSL perl-DBD-MySQL perl-Time-HiRes perl perl-DBI perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker perl-Digest-MD5
2.安装源码包
wget https://www.percona.com/downloads/percona-toolkit/3.0.3/binary/redhat/6/x86_64/percona-toolkit-3.0.3-1.el6.x86_64.rpm
yum localinstall percona-toolkit-3.0.3-1.el6.x86_64.rpm
3.在master和slave创建账号:
mysql>GRANT SELECT,PROCESS,SUPER,REPLICATION SLAVE,CREATE,DELETE,INSERT,UPDATE ON *.* TO 'check'@'%' identified by '123456';
mysql>flush privileges;
说明:指定host为安装软件的机器ip
4.执行:
pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --replicate=cnt.checksums --databases=cnt --tables=ldb_alipay_order h=1.1.1.1,u=check,p=123456,P=3306
参数说明: –no-check-replication-filters 表示不需要检查 Master 配置里是否指定了 Filter。 默认会检查,如果配置了 Filter,如 replicate_do_db,replicate-wild-ignore-table,binlog_ignore_db 等,在从库checksum就与遇到表不存在而报错退出,所以官方默认是yes(–check-replication-filters)但我们实际在检测中时指定–databases=,所以就不存在这个问题,干脆不检测。
–no-check-binlog-format 不对binlog的格式进行检查
–replicate-check-only 只显示主从不一致部分,此参数不会生成新的checksums数据,只会根据checksums表已经有的数据来显示
–databases=,-d:要检查的数据库,逗号分隔。 –databases-regex 正则匹配要检测的数据库,–ignore-databases[-regex]忽略检查的库。Filter选项。
–tables=,-t:要检查的表,逗号分隔。如果要检查的表分布在不同的db中,可以用–tables=dbname1.table1,dbnamd2.table2的形式。 同理有–tables-regex,–ignore-tables,–ignore-tables-regex。–replicate指定的checksum表始终会被过滤。
TS :完成检查的时间 ERRORS :检查时候发生错误和警告的数量 DIFFS :0表示一致,1表示不一致。当指定–no-replicate-check时,会一直为0,当指定–replicate-check-only会显示不同的信息 ROWS :表的行数 CHUNKS :被划分到表中的块的数目 SKIPPED :由于错误或警告或过大,则跳过块的数目 TIME :执行的时间 TABLE :被检查的表名
提示错误: 问题一: Waiting for the –replicate table to replicate to localhost.localdomain… 问题出在percona.checksums 表在从库不存在,根本原因是没有从主库同步过来,所以看一下从库是否延迟严重。
问题二: Diffs cannot be detected because no slaves were found. Please read the –recursion-method documentation for information. 上面的提示信息很清楚,因为找不到从,所以执行失败。用参数–recursion-method 可以指定模式解决.
测试: 主不写,从写入1条数据,再运行效验工具,可以看到错误