pt-table-checksum 主从复制一致性检查

时间:2021-03-13 03:34:22

1. pt-table-checksum介绍

http://www.percona.com/doc/percona-toolkit/2.2/pt-table-checksum.html

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

2. checksum计算原理

2.1 单行数据checksum值的计算

pt工具先检查表的结构,并获取每一列的数据类型,把所有数据类型都转化为字符串,然后用concat_ws()函数进行连接,由此计算出该行的checksum值。checksum默认采用crc32,你可以自己定义效率更高的udf。

2.2 数据块checksum值的计算

如果一行一行的计算checksum再去和从库比较,那么效率会非常低下。pt工具选择智能分析表上的索引,然后把表的数据split成一个个chunk,计算的时候也是以chunk为单位。因此引入了聚合函数BIT_XOR()。它的功能可以理解为把这个chunk内的所有行的数据拼接起来,再计算crc32的值,就得到这个chunk的checksum值。每一次对chunk进行checksum后,pt工具都会对耗时进行统计分析,并智能调整下一个chunk的大小,避免chunk太大对线上造成影响,同时也要避免chunk太小而效率低下。

2.3 一致性如何保证

当pt工具在计算主库上某chunk的checksum时,主库可能还在更新,同时从库可能延迟使得relay-log中还有与这个chunk数据相关的更新,那该怎么保证主库与从库计算的是”同一份”数据?答案是加for update当前读锁,这保证了主库的某个chunk内部数据的一致性。否则,1000个人chekcusm同样的1000行数据,可能得到1000个不同的结果,你无法避开mvcc的干扰!获得for update锁后,pt工具开始计算chunk的checksum值,并把计算结果保存到pt工具自建的结果表中(采用replace into select的方式),然后释放锁。该语句最终会传递到从库并执行相同的计算逻辑。

3. pt-table-checksum的使用

3.1 安装

安装依赖包

perl-DBI  perl-DBD-MySQL

安装percona-toolkit

wget http://www.percona.com/downloads/percona-toolkit/LATEST/percona-toolkit-2.2.7.tar.gz

tar xzvf percona-toolkit-2.2..tar.gz

cd percona-toolkit-2.2.

perl Makefile.PL

make

make install

3.2  数据库结构

主从结构,binlog_format=row

主库:rac3(10.250.7.50)

从库:rac4(10.250.7.60)

3.3 登陆主库,配置账号

需要一个既能登录主库,也能登录从库,而且还能同步数据库的账号

create user wentao@'%' identified by '123456';

grant all privileges on *.* to wentao@'%' identified by '123456';

3.4 在表t1中构造不一致的数据

pt-table-checksum 主从复制一致性检查

pt-table-checksum 主从复制一致性检查

3.5. 主从一致性检查

在主库上执行检测:

pt-table-checksum --nocheck-replication-filters --replicate=yuyue.checksums --databases=yuyue --no-check-binlog-format h=127.0.0.1,u=wentao,p=123456,P=3306

pt-table-checksum 主从复制一致性检查

执行结果参数意义:

TS            :完成检查的时间

ERRORS     :检查时候发生错误和警告的数量

DIFFS        :0表示一致,1表示不一致。当指定--no-replicate-check时,会一直为0,当指定--replicate-check-only会显示不同的信息

ROWS       :表的行数

CHUNKS    :被划分到表中的块的数目

SKIPPED    :由于错误或警告或过大,则跳过块的数目

TIME         :执行的时间

TABLE       :被检查的表名

pt-table-checksum 参数说明:

--nocheck-replication-filters:不检查复制过滤器(即参数文件里设置的repliacte-do-waild-table等规则)

--replicate=yuyue.checksums:把checksums的信息写入指定库,建议直接写到被检查的库里

--no-check-binlog-format :不检查复制的binlog格式(这个参数在,binlog_format=row时,一定要加,不然报错)

--create-replicate-table:这个参数在第一次运行时添加,用于建立checksums表(但是我测试没加,表能正常建立)

--databases=yuyue:指定需要检查的数据库,多个用逗号隔开

--tables:指定需要被检查的表,多个用逗号隔开

h=127.0.0.1:Master的地址

u=wentao:用户名

p=123456:密码

P=3306:端口

通过DIFFS=1可以看出主从的表数据不一致。通过查看从库(rac4)上的yuyue.checksums表可以看到主从库的检验信息。

通过对比this_crc和master_crc,可以看出主备的表是否一致。

root@rac4 mysql > select * from checksums\G;
*************************** 1. row ***************************
db: yuyue
tbl: t1
chunk: 1
chunk_time: 0.000546
chunk_index: NULL
lower_boundary: NULL
upper_boundary: NULL
this_crc: 246be59 #从库的校验值
this_cnt: 4      #从库的行数(rac4)
master_crc: 40deaf21  #主库的校验值
master_cnt: 3      #主库的行数(rac3)
ts: 2014-05-11 09:55:14
*************************** 2. row ***************************
db: yuyue
tbl: t2
chunk: 1
chunk_time: 0.000397
chunk_index: NULL
lower_boundary: NULL
upper_boundary: NULL
this_crc: 40deaf21
this_cnt: 3
master_crc: 40deaf21
master_cnt: 3
ts: 2014-05-11 09:55:14
*************************** 3. row ***************************
db: yuyue
tbl: t3
chunk: 1
chunk_time: 0.00042
chunk_index: NULL
lower_boundary: NULL
upper_boundary: NULL
this_crc: 40deaf21
this_cnt: 3
master_crc: 40deaf21
master_cnt: 3
ts: 2014-05-11 09:55:14
3 rows in set (0.00 sec)

参考文章:

用pt-table-checksum校验数据一致性

 
 

pt-table-checksum 主从复制一致性检查的更多相关文章

  1. SQL Server 2008 安装过程中遇到“性能计数器注册表配置单元一致性”检查失败 问题的解决方法

    操作步骤: 1. 在 Microsoft Windows 2003 或 Windows XP 桌面上,依次单击"开始"."运行",然后在"打开&quo ...

  2. 供应类型与计划分类一致性检查(PO)

    应用 Oracle   Purchasing 层 Level Function 函数名 Funcgtion Name CUXPOIMM 表单名 Form Name CUXPOIMM 说明 Descri ...

  3. 供应类型与计划分类一致性检查(INV)

    应用 Oracle Inventory 层 Level Function 函数名 Funcgtion Name CUXINVIMM 表单名 Form Name CUXINVIMM 说明 Descrip ...

  4. NXP ARM Vector Table CheckSum

    Signature Creator for NXP Cortex-M Devices Algorithm for creating the checksum The reserved Cortex-M ...

  5. FC 与 FB 与 OB 的区别,时间标记冲突与一致性检查 有详细的步骤

    关键字1 组织块的程序是由用户自己编写. 关键字2 时间标记冲突与一致性检查 有详细的步骤. 关键字3 FC 与 FB 与 OB 的区别?   (一)功能 功能块 区别 ? FB 和FC均为 用户编写 ...

  6. pt工具主从一致性检查并修复以及版本3.0.4的版本缺点

    pt-table-checksum和pt-table-sync分别检验master-slave的数据不一致并修复. 1.本次测试环境 [root@172-16-3-190 we_ops_admin]# ...

  7. mysql 主从一致性检查

    我上一次遇到MySQL主从服务器数据一致性问题,想想是几年前的事情了,还依稀记得当时惊慌失措的情景,好在最后借助Maatkit解决了问题.几年后,当我再次面对同样的问题时,Maatkit已经不复存在, ...

  8. TIKV副本一致性检查机制分析

    背景 TIKV使用raft协议来实现副本同步,任何时刻写入一个KEY-VAL键值对,都会基于RAFT协议复制到不同机器的三个副本上,raft协议本身能保证副本同步的强一致性,但是任何系统都可能存在BU ...

  9. Hbase 元数据一致性检查(转)

    最近在学习HBase先关的知识,顺便做一下笔记,以加深知识的了解和掌握. Hbase常用工具 文件检测修复工具 hbase hbck -help 常用选项: -details 显示所有region检查 ...

随机推荐

  1. linux安装apache的纠结过程

    本以为linux下安装apache是件很简单的过程.三命令就可以搞定,jxvf解压,make 编译,make install 安装就OK了.没想到这个过程还颇费周折.可能和环境有关吧.先说一下我的环境 ...

  2. linux awk命令

    简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...

  3. 关于AS3获取当前URL和浏览器信息

    原文链接: http://www.baidu.com/link?url=8-mS_wTlQi5MGvLQ8Oqf34wA-glS4roi0AmMswussY3kpkXoVUnOQQOaj-NGf2Ik ...

  4. 制作输入框(Input)

    怎样判断是否应当使用输入框 输入框,就是用户可以*输入文本的地方.当需要判断是否需要使用输入框时,可以遵循一条原则:凡是需要用户自主输入文本的地方,几乎都必须使用输入框. 输入框的常见用法:输入登录 ...

  5. OWIN 为WebAPI

    OWIN 为WebAPI 宿主 跨平台 OWIN是什么? OWIN的英文全称是Open Web Interface for .NET. 如果仅从名称上解析,可以得出这样的信息:OWIN是针对.NET平 ...

  6. ReIn

    package JBJADV003; import java.io.*;import java.util.Scanner; public class ReIn { /** * @param args ...

  7. java并发编程的艺术——第一章总结

    并发编程的挑战 1.1上下文切换 1.2死锁 1.3资源限制的挑战 1.4本章小结 1.1上下文切换 1.1.1多线程一定快吗 1.1.2测试上下文切换次数和时长 1.1.3如何减少上下文切换 1.1 ...

  8. Java笔记(八)TreeMap & TreeSet & LinkedHashMap

    TreeMap & TreeSet & LinkedHashMap 一.TreeMap HashMap缺陷:键值对之间没有特定的顺序.在TreeMap中, 键值对之间按键有序,Tree ...

  9. SQL dialect is not configured

    在Idea中,xml配置文件报错:SQL dialect is not configured 解决方法如下: 在Idea中,在报错的地方按alt+enter,然后点击Generic配置dialect即 ...

  10. 乘风破浪:LeetCode真题_016_3Sum Closest

    乘风破浪:LeetCode真题_016_3Sum Closest 一.前言      这一次,问题又升级了,寻找的是三个数之和最靠近的某个数,这是非常让人难以思考的,需要把三个数相加之后和最后给的目标 ...