pt-table-checksum
首先这个工具是percona-toolkit里的
使用场景:
当主从复制碰到数据不一致而报错时(error 1062,1032等),我们通过一些方法去解决了这个报错,让主从重新正常同步,这时我们最好在当天业务低峰期去检查一下主从数据是否一致,这时我们就得用到这个pt-table-checksum工具。
测试环境:
主:192.168.181.200 3306
从:192.168.181.201 3307
使用步骤:
下载percona-toolkit的安装包
我们可以去官网下载:https://www.percona.com/downloads/percona-toolkit/LATEST/
直接rpm -ivh这个rpm包就可以了
这边发现我缺少一个依赖包,我们可以去rpmfind.net这个网站去下载
搜索自己需要的包,然后下载就可以了
这样就安装成功了
使用命令:
pt-table-checksum --recursion-method=“processlist” --replicate=“test.checksums” --host=‘192.168.181.200’ --port=3306 --user=‘root’ --password=‘123456’ --databases=test --no-check-binlog-format
recursion-method="processlist"表示用 processlist的方式去发现从库
replicate="test.checksums"表示存储校验数据的表用test库下的checksums表,这个表会自动创建
no-check-binlog-format表示不检查日志
其他端口号一些主机用户信息就不用解释了吧
使用该命令发现无法连接从库,原因是因为recursion-method="processlist"方法的使用场景仅限主从端口号一样的情况,我这边主库用的是3306端口,从库用的是3307端口
解决方案:
在主库上新建一张表:
CREATE TABLE dsns
( id
int(11) NOT NULL AUTO_INCREMENT, parent_id
int(11) DEFAULT NULL, dsn
varchar(255) NOT NULL, PRIMARY KEY (id
) );
插入从库的信息:
INSERT INTO dsns (parent_id,dsn) values(1,‘h=192.168.181.201,u=root,p=123456,P=3307’);
recursion-method参数使用dsn方式,通过dsns表来发现从库
pt-table-checksum --recursion-method=dsn=h=192.168.181.200,D=test,t=dsns --replicate=“test.checksums” --host=‘192.168.181.200’ --port=3306 --user=‘root’ --password=‘123456’ --databases=test --no-check-binlog-format
这样就可以检查主从数据是否一致了,我这边是手动在从库的sbtest1表是插入了一些数据,所以diffs那边会显示为1,就表示这张里有数据不一致。
至于如何去恢复,我们可以用pt-table-sync工具去恢复,博主下次有时间的话会写一篇关于pt-table-sync工具的使用文章。