zoukankan      html  css  js  c++  java
  • 主从校验工具pt-table-checksum和pt-table-sync工作原理

      pt-table-checksum和pt-table-sync是常用来做MySQL主从数据一致性校验的工具,pt-table-checksum只校验数据,不能对数据进行同步;pt-table-sync不仅可以检验数据,还可以将不一致的数据同步。
    工作原理
      两个工具的工作原理基本差不多,分开说明。为了说明简单易懂,抛开了所有内部函数,只是简易的介绍一下工具的工作过程。
    pt-table-checksum工作原理
    1.单行数据checksum值的计算
      首先检查表结构,获取每列的数据类型,把所有类型都转换为字符串,把一整行数据拼接成一个很长的字符串,这行数据计算出一个校验值。就是通过这个值进行主从比较的,如果主从两个值一致,则数据一致,反之亦然。
    2.数据块checksum值的计算
      对于大表,进行单行的比较,势必工作量很大。数据块的比较就顺势而出,其实和单行拼接的原理类似,整块比较只是把一个数据块作为一个单位,拼接成一个长字符串,计算出校验值。说是数据块,其实是按索引来取值进行比较的。因此对于块计算,就需要表有主键或唯一索引。
    3.主从一致性比较
      主库上计算的过程sql通过binlog传递到从库进行从库计算,主库的计算结果存储到一个pt.checksums统计表中,然后将表通过binlog日志方式传递到从库。从库根据计算过程sql计算出数据块的校验值,并把值更新到pt.checksums表中。再通过比较pt.checksums表上主从库的计算值,来比较主从数据是否一致。
      当计算某个数据块的值时,主库可能还有更新,为保证校验的是同一份数据,需要对正在计算的数据块加for update锁,加上锁的同时show master status获取主库的日志点。这样传到从库时,从库执行到该日志点时就wait,直到校验完数据块。
      ye,校验的过程就是这么简单。
     
    pt-table-sync工作原理
    1.单行数据checksum值的计算
    2.数据块checksum值的计算
    3.主从一致性比较
    1,2,3步的原理和上面的一样,就不重复了。
      上面的校验过程只是发现不一致的数据块,发现后就需要深入到块内部,一条条语句比较了,找出那条语句不一致了,并生产replace into语句在主库上执行(注意,不能是insert。这分为两种情况:一是有唯一性主键,如果有唯一性主键或者索引,则insert相同记录会在主库上插入失败;二是没有唯一性主键或者索引,insert相同记录会造成记录重复。故要求pt-table-sync的表必须要有唯一性主键或者索引)。
      之后一块块,一从从的进行校验,递归进行直到over。
    总结:
      MySQL只要涉及到主从,都能和binlog扯上关系,嗯,好好理解binlog。
     
     
     

  • 相关阅读:
    摘记
    【题解】网格 & Single Cut of Failure(trick:答案上界)
    题解 CF1404C 【Fixed Point Removal】
    Linux IO模型知识梳理
    Java IO模型知识梳理
    如何回答什么是线程安全?
    MySQL主从复制与备份
    MySQL的高性能索引策略
    CAS(乐观锁)的原理解析
    Java虚拟机的类加载机制
  • 原文地址:https://www.cnblogs.com/nandi001/p/11727724.html
Copyright © 2011-2022 走看看