mysql主从同步工具--pt-table-sync

下载链接

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 密码。
--print 打印,但不执行命令。
--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 打印出来的好,这样就可以知道那些数据有问题,可以人为的干预下。不然直接执行了,出现问题之后更不好处理。总之还是在处理之前做好数据的备份工作。

参考资料

https://www.cnblogs.com/gomysql/p/3662264.html

https://www.cnblogs.com/paul8339/p/9871879.html

原文地址:https://www.cnblogs.com/whiteY/p/14950588.html