mysql pt工具安装与使用-解决主从问题

Pt工具安装与使用

一、下载包

percona-toolkit-3.6.0-1.el7.x86_64.rpm

下载地址:https://www.percona.com/downloads

二、安装PT

将安装包percona-toolkit-3.6.0-1.el7.x86_64.rpm上传至 服务器

1.安装依赖

yum install -y perl-DBI

yum install -y perl-devel

yum install -y perl-DBD-MySQL

yum install -y perl-Time-HiRes

yum install -y perl-IO-Socket-SSL

yum install -y perl-IO-Socket-SSL.noarch

yum install -y perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker perl-Digest-MD5 perl-TermReadKey

2.安装rpm包

rpm -ivh percona-toolkit-3.6.0-1.el7.x86_64.rpm

三、主从报错解决

首先根据报错状态码解决主从报错,如果主从正常,数据有差异可直接跳过此步骤执行第四步

1.主键冲突解决

从库报错信息如下:

Slave_IO_Running: Yes

Slave_SQL_Running: No

Last_SQL_Errno: 1062

Last_SQL_Error: Error 'Duplicate entry '4' for key 'test.PRIMARY'' on query. Default database: 'sms_log'. Query: 'insert into test values (4,'dd')'

针对这个报错,我们首先要考虑是不是在从库中误操作导致的。如果在从库中进行了一条针对有主键表的 sql 语句的插入,导致主库再插入相同 sql 的时候,主从状态出现异常。发生主键冲突的报错。

解决问题:

使用 percona-toolkit 中的 pt-slave-restart命令指定从库操作调过错误码。执行后观察从库状态是否正常。

pt-slave-restart h=192.168.118.31,u=root,p=jjxt@123,P=3306 --error-numbers=1062

如下图可以看到有两处1062差异:

2.从库数据异常解决

Slave_IO_Running: Yes

Slave_SQL_Running: No

Last_SQL_Errno: 1051

Last_SQL_Error: Error 'Unknown table 'sms_log.test'' on query. Default database: 'sms_log'. Query: 'DROP TABLE `test` /* generated by server */'

针对这个报错,表test曾经存在于在主服务器中,但是它没有在从属服务器中存在过,在主库执行删除操作时,从服务器找不到test表导致DROP TABLE失败。

解决问题:

使用 percona-toolkit 中的 pt-slave-restart命令指定从库操作跳过错误码。执行后观察从库状态是否正常。

pt-slave-restart h=192.168.118.31,u=root,p=jjxt@123,P=3306 --error-numbers=1051

如下图:

四、数据差异同步

主从状态正常后可通过以下方式进行主从数据差异同步。

1、检查主从库差异

若主从密码和端口一致,此处仅填写主库IP和端口即可,执行命令默认会创建pt库和checksums 表,记录差异数据。(不使用root用户可以单独创建一个用户并赋予所有库的权限。)

pt-table-checksum h=192.168.118.21,u=root,p=jjxt@123,P=3306 --databases=sms_log --max-load="Threads_running=25" --nocheck-replication-filters --create-replicate-table --replicate=pt.checksums --no-check-binlog-format --no-check-slave-tables

若主从端口不一致:
pt-table-checksum --source h=主库地址,P=主库端口,u=用户名,p=密码 --replicate h=从库地址,P=从库端口,u=用户名,p=密码 --databases=sms_log --max-load="Threads_running=25" --nocheck-replication-filters --create-replicate-table --replicate=pt.checksums --no-check-binlog-format --no-check-slave-tables

若指定表:--tables=test

2、主从库数据同步

pt-table-sync --replicate=pt.checksums --databases=sms_log h=192.168.118.21,u=root,p=jjxt@123,P=3306 h=192.168.118.31,u=root,p=jjxt@123,P=3306 --charset=utf8 --execute

若指定表:--tables=test

如下图,差异已修复

posted @ 2025-07-03 14:12  小白不怕黑  阅读(91)  评论(0)    收藏  举报