pt-table-checksum
mysql> grant select,insert,update,delete,create,drop,super,process,replication slave on *.* to ‘syncuser‘@‘%‘ identified by ‘Syncuser@123‘;
2. 通过pt-table-checksum命令对主从数据进行校验。
[root@node1 ~]# pt-table-checksum -usyncuser -pSyncuser@123 --nocheck-replication-filters --no-check-binlog-format --databases=test --replicate=test.checksums --create-replicate-table
Checking if all tables can be checksummed ...
Starting checksum ...
TS ERRORS DIFFS ROWS DIFF_ROWS CHUNKS SKIPPED TIME TABLE
09-04T21:36:43 0 0 0 0 1 0 0.089 test.efs_sys_loginfo4
09-04T21:36:43 0 0 1006 0 1 0 0.089 test.groupby
09-04T21:36:43 0 0 0 0 1 0 0.030 test.groupby1
09-04T21:36:43 0 1 1006 0 1 0 0.030 test.groupby2
09-04T21:36:43 0 0 7 0 1 0 0.030 test.student
09-04T21:36:43 0 0 7 0 1 0 0.032 test.student1
09-04T21:36:43 0 1 0 8 1 0 0.034 test.t
09-04T21:36:43 0 0 57344 0 4 0 0.328 test.t1
09-04T21:36:43 0 1 1 0 1 0 0.028 test.test
09-04T21:36:43 0 0 8 0 1 0 0.036 test.tuser
3. 参数详解--nocheck-replication-filters:不检查复制的过滤规则,比如replicate-ignore-db、replicate-wild-do-table。--no-check-binlog-format:不检查复制的binlog模式,如果binlog模式是row模式,需要启用该参数。--create-replicate-table:第一次进行checksum需要启用该参数,会进行checksum表的创建,用于存放结果。--replicate=test.checksums:存放checksum结果的表。--databases:表示要检查的库。--tables(-t):表示要检查的表。--replicate-check-only:表示只显示不同步的表。--recursion-method:正常情况下工具会自动识别从库,如果识别失败,可以用该参数 指定查找slave的方法,参数有四种,分别是processlist、hosts、dsn=DSN、no四种,用来决定查找slave的方式是通过show processlist、show slave hosts还是通过dsn=DSN的方式。采用dsn=DSN方式时需要先创建dsn表,建表语句如下:
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(dsn) values(‘h=36.30.39.176,u=syncuser,p=Syncuser@123,P=3306‘);
这样就可以采用dsn方式了,--recursion-method dsn=D=test,t=dsns。TS ERRORS DIFFS ROWS DIFF_ROWS CHUNKS SKIPPED TIME TABLE
09-04T22:29:52 0 0 1 0 1 0 0.029 test.dsns
TS:完成检查的时间
ERRORS:错误和告警的数量。
DIFFS:是否一致,0代表一致,1代表不一致。
ROWS:表的行数
DIFF_ROWS:
CHUNKS:划分的块的数目
SKIPPED:跳过的块的数目
TIME:执行时长
TABLE:表名
pt-table-sync
pt-table-sync h=36.30.39.117,P=3306,u=syncuser,p=Syncuser@123 --database=test --replicate=‘test.checksums‘ --execute
2. 同时指定--replicate和--sync-to-master,DSN只能有一个,且为从库。
pt-table-sync h=36.30.39.176,P=3306,u=syncuser,p=Syncuser@123 --database=test --tables=t1 --replicate=‘test.checksums‘ --sync-to-master --execute
3. 如果只指定一个DSN,那么必须使用--replicate或者--sync-to-master中的一个,否则报错: At least one DSN is required, and at least two are required unless --sync-to-master or --replicate is specified。 这里我们指定了--sync-to-master,那么DSN信息就代表了从库。
pt-table-sync h=36.30.39.176,u=syncuser,p=Syncuser@123,D=test,t=t1 --sync-to-master --execute
4. 当有多个DSN时,如果指定了--sync-to-master,那么所有的主机均为从库。否则报错:Can‘t determine master of D=test,h=…..,p=...,t=t1,u=syncuser at /usr/bin/pt-table-sync line 10020.
pt-table-sync h=36.30.39.176,u=syncuser,p=Syncuser@123,D=test,t=t1 h=36.30.39.213,u=syncuser,p=Syncuser@123,D=test,t=t1 --sync-to-master --execute
5. 多个DSN,不指定--sync-to-master和--replicate,如果需要修复从库的数据需要指定--no-check-slave。
pt-table-sync h=36.30.39.117,u=syncuser,p=Syncuser@123,D=test,t=t1 h=36.30.39.176,u=syncuser,p=Syncuser@123 h=36.30.39.213,u=syncuser,p=Syncuser@123 --no-check-slave –execute
参数详解:--ask-pass: 连接MySQL时提示输入密码。DSN syntax is key=value[,key=value...] Allowable DSN keys:
KEY MEANING
=== =============================================
A 指定字符集
D 同步的数据库
P 端口
S Socket文件
h 要连接的host
p 数据库密码
t 要同步的表
u 数据库用户
注意事项及建议1. 当出现主从不一致时,我们需要判断哪个库的数据是正确的,大多数情况我们希望在主库执行变更并且同步到从库。2. 建议要同步的表要有主键,避免出现数据重复的问题。3. 执行变更命令前先通过--print或者--dry-run进行检查。4. 使用多个DSN选项时,按照数据同步方向填写主机信息,如果有从库需要配合--no-check-slave参数使用。5. 该工具在进行校验分析时会对表执行for update操作,避免在业务高峰期进行。本文分享自微信公众号 - MySQL数据库技术栈(Mysqltechnology)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
来源:站长资讯中心
原文:https://www.cnblogs.com/0591jb/p/13642365.html