当前位置: 首页 > 工具软件 > gt-checksum > 使用案例 >

pt-table-checksum

谷弘致
2023-12-01
使用方法:
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         :端口
 
 
 
 
 

转载于:https://www.cnblogs.com/liang545621/p/7518374.html

 类似资料: