下载链接
https://www.percona.com/downloads/percona-toolkit/LATEST/
官方文档
https://www.percona.com/doc/percona-toolkit/LATEST/pt-table-sync.html
安装(以谁为参照库在那个机器进行安装,一般主库机器安装)
包名:percona-toolkit-3.3.1-1.el7.x86_64.rpm
安装命令:
rpm -ivh percona-toolkit-3.3.1-1.el7.x86_64.rpm
如果安装过程报以下错误则需要提前安装依赖包
-
yum install perl-DBI
-
yum install perl-DBD-MySQL
-
yum install perl-Time-HiRes
-
yum install perl-IO-Socket-SSL
-
yum install perl-Digest-MD5
使用
通过pt-table-checksum发现主从数据不一致的话,可以通过pt-table-sync来同步数据。
在使用pt_table-sycn 工具时指定的mysql用户需要具有增删改查访问主从数据库等特定权限。
参数说明
参数 | 说明 |
---|---|
--replicate | 指定通过pt-table-checksum得到的表,这2个工具差不多都会一直用。 |
--databases | 指定执行同步的数据库,多个用逗号隔开。 |
--tables | 指定执行同步的表,多个用逗号隔开。 |
--sync-to-master | 指定一个DSN,即从的IP,他会通过show processlist或show slave status 去自动的找主。 |
h=127.0.0.1 | 服务器地址,命令里有2个ip,第一次出现的是M的地址,第2次是Slave的地址。 |
u=root | 帐号。 |
p=123456 | 密码。 |
打印,但不执行命令。 | |
--execute | 执行命令。 |
master 表状态
slave 表状态
可以看到从库比主库多一条数据,且ID为3时对应的name不同
检查主从数据不一致状态pt-table-checksum
主库机器执行
pt-table-checksum --nocheck-replication-filters --replicate=cmbh.checksums --databases=cmbh --tables=a h=***.***.***.***,u=***,p=***,P=3306 --no-check-binlog-format
参数 | 注释 |
---|---|
TS | 完成检查的时间。 |
ERRORS | 检查时候发生错误和警告的数量。 |
DIFFS | 0表示一致,1表示不一致。当指定--no-replicate-check时,会一直为0,当指定--replicate-check-only会显示不同的信息。 |
ROWS | 表的行数。 |
CHUNKS | 被划分到表中的块的数目。 |
SKIPPED | 由于错误或警告或过大,则跳过块的数目。 |
TIME | 执行的时间。 |
TABLE | 被检查的表名。 |
pt-table-checksum 已经查出来了表数据不同步,接下来使用pt-table-sync进行数据同步(第一个ip为主库,第二个为ip从库)
pt-table-sync --print --databases=cmbh --tables=name_info h=***.***.***.***,u=cmbh,p=***,P=3306 dsn=u=cmbh,p=***,h=***.***.***.***,P=3306 --no-check-slave
可以看到打印出来了从库比主库多的那条数据和ID为3时对应的name不同的数据执行sql,只需要在从库执行sql即可使数据一致.
建议还是用--print 打印出来的好,这样就可以知道那些数据有问题,可以人为的干预下。不然直接执行了,出现问题之后更不好处理。总之还是在处理之前做好数据的备份工作。