mysql主从数据一致性校验,常用的方法是Percona-Toolkit的组件pt-table-checksum,这东西怎么用网上一大堆,就不啰嗦了。主要说一下通过dsns方式发现从库的一种方式。

pt工具连接到主库后,默认是是通过show processlist,通过主从复制线程获取从库的信息,进而连接从库的。默认方式连接从库是有他的局限性的,以下场景没法使用:

场景:

  1.非标准端口3306,或主从端口不一致;

  2.多源复制搭建的主从;

  3.阿里云、腾讯云上的主从关系,无法直接获取从库的信息;

通过dsns方式连接从库,只需要关注两点:

  1.dsns表;

  2.recursion-method参数项;

先说dsns表,表结构如下:

这个表可以建在任何服务器上,只要能被访问到就行,我习惯于将这样的工具放在总控服务器上,然后通过这台服务器管理所有mysql数据库。

create database pt;
CREATE TABLE `pt`.`dsns` ( `id` int(11) NOT NULL AUTO_INCREMENT, `parent_id` int(11) DEFAULT NULL, `dsn` varchar(255) NOT NULL, PRIMARY KEY (`id`) );

+----+-----------+-----------------------------------------+
| id | parent_id | dsn |
+----+-----------+-----------------------------------------+
| 1 | 1 | h=192.168.11.73,u=chen,p=asd.123,P=3307 |
+----+-----------+-----------------------------------------+

主要是dsn这个字段:里面是从库的连接信息,如果主从的用户登录一样,只写:h=192.168.11.73,P=3307就行了。
 
再说recursion-method参数:
--recursion-method "dsn=D=pt,t=dsns,h=192.168.11.92,u=op_dba,p=vqR9cGbEwKNuvy4Z"
这个参数是dsns表所在服务器的连接信息,我的顺序分别是:库、表、服务器IP、用户、密码;当然如果dsns表在主服务器上,只写dsn=D=pt,t=dsns就行了。
 
主要是这两个需要注意的,其他的网上一大堆,可以自己找。
最后来一个完整的命令,这个命令我常用,但没包含所有项:

pt-table-checksum --host='192.168.11.73' --user='check' --password='asd.123' --port=3306
--create-replicate-table --databases="jxbbs" --tables="im_group_msg"
--no-check-binlog-format --recursion-method "dsn=D=pt,t=dsns,h=192.168.11.92,u=op_dba,p=vqR9cGbEwKNuvy4Z"
--recurse=1 --nocheck-replication-filters --replicate-check

 
 
05-11 14:39