天天看点

pt-table-checksum

使用方法:

pt-table-checksum [OPTIONS] [DSN]

pt-table-checksum:在主<M>上通过执行校验的查询对复制的一致性进行检查,对比主从的校验值,从而产生结果。DSN指向的是主的地址,该工具的退出状态不为零,如果发现有任何差别,或者如果出现任何警告或错误,更多信息请见官网。

不指定任何参数,会直接对本地的所有数据库的表进行检查。

如果报错:

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

因为找不到从,所以执行失败。用参数--recursion-method 可以指定模式解决,关于--recursion-method参数的设置有:

关于--recursion-method参数的设置有:

METHOD       USES

===========  =============================================

processlist      SHOW PROCESSLIST

hosts              SHOW SLAVE HOSTS

cluster            SHOW STATUS LIKE 'wsrep\_incoming\_addresses'

dsn=DSN        DSNs from a table

none               Do not find slaves

默认是通过show processlist 找到host的值或show slave hosts 找到host的值。

还有一种方法是show slave hosts;前提从库配置文件里面已经配置自己的地址和端口:

# grep 'report' /etc/my.cnf 

report_host = 192.168.56.56

report_port = 3306

最重要的一点是我们需要在从库上授权,能让主库访问。

注意:

1、  根据测试,需要一个即能登录主库,也能登录从库的账号;

2、  只能指定一个host,必须为主库的IP;

3、  在检查时会向表加S锁;

4、  运行之前需要从库的同步IO和SQL进程是YES状态。

#  pt-table-checksum --replicate=lgj.checksums --nocheck-replication-filters --no-check-binlog-format   --databases=lgj --tables=tb01 h=127.0.0.1,u=repl,p=oracle,P=3306

                 TS ERRORS  DIFFS     ROWS  CHUNKS SKIPPED    TIME TABLE

03-02T17:32:34      0         1              1          1           0          1.158       lgj.tb01

通过DIFFS 是1 就可以看出主从的表数据不一致。怎么不一致呢? 通过指定--replicate=lgj.checksums 参数,就说明把检查信息都写到了checksums表中。

进入SLAVE相应的库中查看checksums表的信息

TS            :完成检查的时间。

ERRORS        :不一致的chunk数量。当指定 --no-replicate-check 即检查完但不立即输出结果时,会一直为0;当指定 --replicate-check-only 即不检查只从checksums表中计算crc32,且只显示不一致的信息(毕竟输出的大部分应该是一致的,容易造成干扰)。

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=      :指定需要被检查的表,多个用逗号隔开 

--ignore-databases        :排除某些库。       

--ignore-tables               :排除某些表。

--where                          :可以使用限定条件。

h=127.0.0.1    :Master的地址

u=repl           :用户名

p=oracle        :密码

P=3306         :端口