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
如下图,差异已修复