pt-table-sync 恢复主从数据一致

学习技术需要掌握

作用、原理、安装步骤、工具使用、模拟演示、注意细节、优点缺点

一、作用、原理

pt-table-sync的作用是: 当我们的主从复制有数据不一致的情况,我们就可以通过pt-table-sync来使主从数据一致。

原理:修复主从不一致的数据,总是在主库上面执行数据的修改,再同步到从上,不会直接更改成从的数据,在主库上执行更改是基于主上现在的数据,不会更改主上数据。 
注意:在修复主从数据之前,记得先备份数据,避免造成数据的丢失,执行excute之前,最好用--print或者--dry-run查看一下数据会怎么变化

二、工具使用

我们判断主从数据不一致是用 pt-table-checksum工具,发现有数据不一致后再使用 pt-table-sync来进行修复

① 先打印出修复的sql

pt-table-sync h=192.168.88.130,P=3306,u=root,p=123456  --databases=test --tables=y --sync-to-master --transaction --verbose --print

h192.168.88.130 是数据不一致的从机地址(注意:这里写的是从机)

--databases=test --tables=y 修复的数据库和表

'--transaction' : 指锁表操作(LOCK TABLES)不会执行,取代的方式是通过事务的开始和提交来进行锁定操作

--verbose,-v 指定打印更详细的操作信息。

--print 并不会直接进行操作数据修复,而是打印

# Syncing P=3306,h=192.168.88.130,p=...,u=root
# DELETE REPLACE INSERT UPDATE ALGORITHM START    END      EXIT DATABASE.TABLE
REPLACE INTO `test`.`y`(`id`) VALUES ('2') /*percona-toolkit src_db:test src_tbl:y src_dsn:P=3306,h=192.168.88.129,p=...,u=root dst_db:test dst_tbl:y dst_dsn:P=3306,h=192.168.88.130,p=...,u=root lock:1 transaction:1 changing_src:1 replicate:0 bidirectional:0 pid:5649 user:root host:master-129*/;
#      0       1      0      0 Chunk     02:46:06 02:46:06 2    test.y

我测试的从机少了一条数据,则上面的步骤测试,就是在主库 REPLACE 操作,主库执行后在从库直接添加数据

REPLACE INTO `test`.`y`(`id`) VALUES ('2')

② 检查上面的步骤如果没有问题,则可以进行修复

 pt-table-sync h=192.168.88.130,P=3306,u=root,p=123456  --databases=test --tables=y --sync-to-master --transaction --verbose --execute

 上面执行后,我的从机就有了id = 2的数据,主从一致了。

三、注意细节

提示:需要注意的是,需要同步的表上必须要有主键或者唯一索引,否则会出错
同时,pt-table-sync 修复数据时,会造成锁表,要在业务低峰期来修复主库的数据

① 对找到的主从不一致的行,采用replace into语句,在主库执行一遍以生成该行全量的binlog,并同步到从库,这会以主库数据为基准来修复从库;
② 对于主库有的行而从库没有的行,采用replace在主库上插入(必须不能是×××ert);
③ 对于从库有而主库没有的行,通过在主库执行delete来删除(pt-table-sync强烈建议所有的数据修复都只在主库进行,而不建议直接修改从库数据

切记第三种情况,假如从库有而主库没有的话,直接把从库的数据在主库中insert,这样会让从库的主键冲突,导致从机sql线程不能正常运行。好的建议是先把从机有的数据备份,然后根据pt-table-sync工具使主从先数据一致,然后再去主库执行备份的数据。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值