首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Mysql一致性效验_pt工具--原理

Mysql一致性效验_pt工具--原理

原创
作者头像
陈不成i
修改2021-06-16 14:20:27
修改2021-06-16 14:20:27
9030
举报
文章被收录于专栏:ops技术分享ops技术分享

一.简介

pt工具可以随机抽取主从的数据进行对比,用于测试主从数据一致性。也可以对不一致数据进行修复。这个工具在主或者从上安装均可

二.原理介绍

它通过在主库执行基于statement的sql语句来生成主库数据块的checksum,把相同的sql语句传递到从库,并在从库上计算相同数据块的checksum,最后,比 较主从库上相同数据块的checksum值,由此判断主从数据是否一致。这种校验是分表进行的,在每个表内部又是分块进行的,而且pt工具本身提供了非常多的限 流选项,因此对线上服务的冲击较小。

pt工具选择智能分析表上的索引,然后把表的数据split成一个个chunk,计算的时候也是以chunk为单位。每一次对chunk进行checksum后,pt工具都会对耗时 进行统计分析,并智能调整下一个chunk的大小,避免chunk太大对线上造成影响,同时也要避免chunk太小而效率低下。

连接到主库:pt工具连接到主库,然后自动发现主库的所有从库。默认采用show full processlist来查找从库,但是这只有在主从实例端口相同的情况下才有效。

内部工作过程:

  1. 连接到主库:pt工具连接到主库,然后自动发现主库的所有从库。默认采用show full processlist来查找从库,但是这只有在主从实例端口相同的情况 下才有效。
  2. 查找主库或者从库是否有复制过滤规则:这是为了安全而默认检查的选项。你可以关闭这个检查,但是这可能导致checksum的sql语句要么不会同步到从 库,要么到了从库发现从库没有要被checksum的表,这都会导致从库同步卡库。
  3. 开始获取表,一个个的计算。
  4. 检查表结构,进行数据类型转换等,生成checksum的sql语句。
  5. 根据表上的索引和数据的分布,选择最合适的split表的方法。
  6. 开始checksum表。
  7. 默认在chunk一个表之前,先删除上次这个表相关的计算结果。除非—resume。
  8. 根据explain的结果,判断chunk的size是否超过了你定义的chunk-size的上限。如果超过了,为了不影响线上性能,这个chunk将被忽略。
  9. 把要checksum的行加上for update锁,并计算。
  10. 把计算结果存储到master_crc master_count列中。
  11. 调整下一个chunk的大小。
  12. 等待从库追上主库。如果没有延迟备份的从库在运行,最好检查所有的从库,如果发现延迟最大的从库延迟超过max-lag秒,pt工具在这里将暂停。
  13. 如果发现主库的max-load超过某个阈值,pt工具在这里将暂停。
  14. 继续下一个chunk,直到这个table被chunk完毕。
  15. 等待从库执行完checksum,便于生成汇总的统计结果。每个表汇总并统计一次。
  16. 循环每个表,直到结束。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.简介
  • 二.原理介绍
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档