学习技术需要掌握
作用、原理、安装步骤、工具使用、模拟演示、注意细节、优点缺点
一、作用、原理
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工具使主从先数据一致,然后再去主库执行备份的数据。