简介:今天咱们来聊聊PT修复工具pt-table-sync
注意事项:
1 表要有主键或者唯一键
2 针对每一个chunk加的是for update锁
3 修复过程中不能容忍从库延迟 如果从库延迟太多,pt-table-sync会长期持有对chunk的for update锁,然后等待从库的master_pos_wait执行完毕或超时。从库延迟越大,等待过程就越长,主库加锁的时间就越长,对线上影响就越大
4 有触发器和主外键约束的情况下要慎用
5 主从数据不一致需要通过replace into来修复,在主库应用生成binlog,并会应用到所有从库
6 根据pt-table-checksum的表信息修复的,所以要先校验后修复
7 pt-table-sync不会同步表结构、索引等,只同步不一致的数据
用户权限
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP,SUPER ON db.* TO 'god'@'%' IDENTIFIED BY 'god'//修复的库
相关参数
–sync-to-master 指定一个DSN,即从的IP,他会通过show processlist或show slave status 去自动的找主。
--unique-checks 唯一键检测
--print 进行打印语句
--execute 真正执行
常用命令范式
pt-table-sync --replicate test.checksums --sync-to-master --unique-checks h=从IP,P=3306,u=god,p=god --print 打印
pt-table-sync --replicate test.checksums --sync-to-master --unique-checks h=从IP,P=3306,u=god,p=god --execute 执行
解决思路
1 先用pt-table-checksum校验一遍,确定不一致的程度:如果不同步的很少,用pt-table-sync直接修复;否则,用备份先替换它,然后用pt-table-sync修复
2 在用rsync工具修复的时候最好先print再execute或者手工对从库执行sql即可
补充
针对主从同步发生一些错误的场景
1 pt-table-checksum 针对发生的表进行校验,最好采用DSNS
2 pt-table-sync 根据第一步的信息进行修改,然后执行sql