mysql数据库主从一致性验证(pt-table-checksum)

pt-table-checksum安装

安装工具的服务器需要能够连接mysql的主从
1.软件下载:
    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

2.安装该工具依赖的软件包:
    yum install perl-IO-Socket-SSL perl-DBD-MySQL perl-Time-HiRes -y
3、软件安装
    rpm -ivh percona-toolkit-3.0.3-1.el6.x86_64.rpm 
    如果提示需要依赖,那么使用下列方式安装
    yum localinstall percona-toolkit-3.0.3-1.el6.x86_64.rpm
4、查看是否安装成功
    rpm -qa | grep percona-toolkit

数据库添加check 用户

在master和slave创建账号:
mysql>GRANT SELECT,PROCESS,SUPER,REPLICATION SLAVE,CREATE,DELETE,INSERT,UPDATE ON *.* TO 'USER'@'HOST' identified by 'PASSWORD';
mysql>flush privileges;
说明:HOST指安装percona-toolkit的服务器IP。

命令执行

#pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --replicate=cnt.checksums --databases=cnt --tables=ldb_alipay_order h=Master_HOST,u=root,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表始终会被过滤。
[root@ws02 scripts]# pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --replicate=cnt.checksums --databases="test" h=192.168.1.1,u=test,p="test",P=3308
            TS ERRORS  DIFFS     ROWS  CHUNKS SKIPPED    TIME TABLE
03-30T13:31:48      0      0      607       1       0   0.208 test.tb_key
03-30T13:31:48      0      0      253       1       0   0.220 test.tb_player
03-30T13:31:49      0      0        6       1       0   0.204 test.tb_con
03-30T13:31:49      0      0     6116       4       0   0.704 test.tb_dev
03-30T13:31:49      0      0     5645       1       0   0.221 test.tb_com
03-30T13:31:50      0      0       17       1       0   0.213 test.tb_class
03-30T13:31:50      0      0        6       1       0   0.196 test.tb_banj

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

错误处理

pt-table-checksum工具会在主上建库,如果同步不到从商的话回报错,在主上面my.cnf中需要同步的库,重启后重新执行命令
Waiting for the --replicate table to replicate to localhost.localdomain...
问题出在percona.checksums 表在从库不存在,根本原因是没有从主库同步过来,所以看一下从库是否延迟严重。

猜你喜欢

转载自blog.csdn.net/mofiu/article/details/79756586