利用pt-table-checksum检查主从数据是否一致

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检查主从数据是否一致_第1张图片
搜索自己需要的包,然后下载就可以了
利用pt-table-checksum检查主从数据是否一致_第2张图片
这样就安装成功了

使用命令:
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表示不检查日志
其他端口号一些主机用户信息就不用解释了吧

利用pt-table-checksum检查主从数据是否一致_第3张图片
使用该命令发现无法连接从库,原因是因为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

利用pt-table-checksum检查主从数据是否一致_第4张图片
这样就可以检查主从数据是否一致了,我这边是手动在从库的sbtest1表是插入了一些数据,所以diffs那边会显示为1,就表示这张里有数据不一致。

至于如何去恢复,我们可以用pt-table-sync工具去恢复,博主下次有时间的话会写一篇关于pt-table-sync工具的使用文章。

你可能感兴趣的:(mysql,mysql,数据库)