利用pt-table-sync进行数据不一致修复

【前言】mysql由于软件本身的灵活性导致了可能主从数据库已经不一致了,但是数据库的主从监控却是正常的,前面已经介绍过pt-table-checksum工具可以检验出主从表中不一致的数据。

解决问题的能力比发现问题的能力更重要。本文档将介绍通过pt-table-sync处理主从数据库不一致的问题;

 

【说明】实验的环境和上次进行校验的环境和测试关联,测试之前请部署好环境;

image

 

【注意事项】pt-table-sync需要在从数据库上面进行执行

 

【使用说明】使用print参数,他会在屏幕显示修复的SQL语句。然后可以手工确认并执行。

脚本【1】  基于checksums信息对Slave 192.168.47.165同步testdb.john表数据

pt-table-sync --print --replicate=test.checksums --databases=test --tables=john --sync-to-master h=192.168.47.165,u=root,p=123456

percona-toolkit src_db:test src_tbl:john src_dsn:P=3306,h=192.168.47.167,p=...,u=root dst_db:test dst_tbl:john dst_dsn:P=3306,h=192.168.47.165,p=...,u=root lock:1 transaction:1 changing_src:1 replicate:0 bidirectional:0 pid:28054 user:root host:mysql02*/;

 

脚本【2】 全量同步修复Slave的testdb.john表数据

[root@mysql02 bin]# pt-table-sync --print  --sync-to-master h=192.168.47.165,P=3306,u=root,p=123456 --database test --tables=john

REPLACE INTO `test`.`john`(`id`) VALUES ('5') /*

percona-toolkit src_db:test src_tbl:john src_dsn:P=3306,h=192.168.47.167,p=...,u=root dst_db:test dst_tbl:john dst_dsn:P=3306,h=192.168.47.165,p=...,u=root lock:1 transaction:1 changing_src:1 replicate:0 bidirectional:0 pid:28054 user:root host:mysql02*/;

 

脚本【3】直接同步主从数据库test

[root@mysql02 bin]# pt-table-sync --print  --sync-to-master h=192.168.47.165,P=3306,u=root,p=123456 --database test


REPLACE INTO `test`.`checksums`(`db`, `tbl`, `chunk`, `chunk_time`, `chunk_index`, `lower_boundary`, `upper_boundary`, `this_crc`, `this_cnt`, `master_crc`, `master_cnt`, `ts`) VALUES ('test', 'john', '1', 0.004643, NULL, NULL, NULL, '42981178', '5', '42981178', '5', '2015-03-10 17:57:56') /*percona-toolkit src_db:test src_tbl:checksums src_dsn:P=3306,h=192.168.47.167,p=...,u=root dst_db:test dst_tbl:checksums dst_dsn:P=3306,h=192.168.47.165,p=...,u=root lock:1 transaction:1 changing_src:1 replicate:0 bidirectional:0 pid:28166 user:root host:mysql02*/;

 

以上的脚本中可以把--print替换成—execute,直接进行主从的数据库修复;

 

【注】用pt-table-sync修复的时候,必须保证被replace的表上有主键或唯一键,否则就会报以下的错误

Can't make changes on the master because no unique index exists at /usr/bin/pt-table-sync line 10655.  while doing test.john on 192.168.47.165

 

总结:pt-table-checksum 和 pt-table-sync 一起构成了mysql主从数据一致监控的两把利器,pt-table-sync在进行--execute的时候需要小心,一般情况都是进行print相应的sql语句,然后再到从数据库执行。

........................................................................................................................................................................

本文作者:JOHN,某上市公司DBA,业余时间专注于数据库的技术管理,从管理的角度去运用技术。

ORACLE技术博客:ORACLE 猎人笔记               数据库技术群:367875324 (请备注ORACLE管理 ) 

........................................................................................................................................................................

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值