mysql主从一致性校验工具-pt

一、环境

1、系统环境

系统 IP 主机名 说明 server_id
centos6.7 MasterIP master 数据库:主 177 
centos6.7 SlaveIP slave 数据库:从 148

2、软件环境

软件 版本 安装方式 说明
pt工具 3.0.4 编译安装 这是一个综合工具包,包含很多pt命令
mysql数据库 5.6.37 yum安装 主从环境

3、需要用到库

库名 表名 用途
 percona checksums
存储pt命令监测的结果,第一次执行检测命令时会自己创建

修复工具修复的时候会读取该表

#本表格也可以自己创建,在使用pt工具的时候指定库表名字,详见下面的参数解释。

注意:自建库表测试尚未通过。

二、为什么要做主从一致性监测

1、主从复制是基于binlog的逻辑复制,难免出现复制数据不一致的风险

2、这个风险不但会引起用户数据访问前后不一致的风险

3、而且会导致后续复制出现1032、1062错误进而引起复制架构停滞的隐患

4、为了及时发现并解决这个问题

5、我们需要定期或不定期地开展主从复制数据一致性的校验和修复工作

三、主从一致性监测原理

四、pt工具监测

用到的命令:

1、pt-table-check       #监测主从一致

2、pt-table-sync         #修复主从一致

mysql主从一致性校验,基于pt工具进行。

#限制及问题

1、在检查阶段,超过1000行的数据,如果没有设定索引或者主键,则报错,该表会跳过检查。

2、在修复阶段,如果表没有设置主键或索引,则修复报错,可以手动进行修复。

3、监测是基于块进行的,如果mysql表的数据没有进行分块,那么当表过大时,会造成监测一段时间后发现没有问题会跳过改表。

4、当数据库两个数据不一致,但是checksum检测一致时,没有比对出不一致。

主库和从库账号一致,密码不一致发现了这种问题。

原因:对于修改密码的操作,chencksum的值并没有发生变化。

五、安装pt工具

最好所有主库从库都安装

1、安装依赖

yum install perl-IO-Socket-SSL perl-DBD-MySQL perl-Time-HiRes perl perl-DBI -y

yum install perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker -y

2、下载安装包

1、官网下载

3、安装

tar xzvf percona-toolkit-3.0.4_x86_64.tar.gz

cd percona-toolkit-3.0.4

perl Makefile.PL   --安装到非默认路径PREFIX=${HOME}

make

make test

make install

六、pt工具常用命令

1、创建监测账号

grant all on *.*  to   ‘zxfly_check‘@‘192.168.22.% ‘ identified by ‘zxfly‘;

flush privileges;

2、监控用的表为:percona.checksum该表会自动创建。

监测:

#指定库名

pt-table-checksum --databases zxfly -u‘zxfly‘ -p‘zxfly‘ -hMasterIP -P3306 2>/logs/pt_error.log 1>/logs/pt_info.log

#不指定库,监测所有数据库(除information_schema、percona、performance_schema库)

pt-table-checksum --quiet -u‘zxfly‘ -p‘zxfly‘ -hMasterIP -P3306 2>/logs/pt_error.log 1>/logs/pt_info.log

pt-table-checksum --replicate-check-only -u‘zxfly‘ -p‘zxfly‘ -hMasterIP -P3306

打印修复sql:指定库表

pt-table-sync  --databases=dataname --tables=table1,table2 h=MasterIP,u=zxfly,p=zxfly h=SlaveIP,u=zxfly,p=zxfly --charset=utf8 --print

修复:

pt-table-sync  --databases=dataname --tables=table1,table2 h=MasterIP,u=zxfly,p=zxfly h=SlaveIP,u=zxfly,p=zxfly --charset=utf8 --exec

七、pt工具常用参数

1、pt-table-checksum

参数 参数说明 备注
--[no]check-replication-filters 不检查复制过滤器,建议启用。后面可以用--databases来指定需要检查的数据库。 当前环境不需要该参数,默认开启
--no-check-binlog-format 不检查复制的binlog模式,要是binlog模式是ROW,则会报错。 默认是监测,使用默认值,如果添加该参数可能导致diff不出来
--replicate-check-only 只显示不同步的信息。
开启这个,可以减少输出并且显示不一致的从库主机名

不过这个只是显示已经检测过的不一致信息,并不能显示当前的。

--replicate= 把checksum的信息写入到指定表中,建议直接写到被检查的数据库当中。不需要指定 默认会创建percona库下checksum表
-h -u -p -P masterIP 监测账号 密码 端口  
--databases= 指定需要被检查的数据库,多个则用逗号隔开。  
--tables= 指定需要被检查的表,多个用逗号隔开  
--recursion-method 指定监测从库的模式,默认使用processlist,也可以指定dsn
多个从库可以这样指定。--recursion-method=dsn=h=host,D=pt,t=dsns

D 库名 t 表名

--quiet 安静模式,最小化打印,纸打印错误行 与--replicate-check-only类似,但不显示从库信息

dsn库表结构及用法为:

  1. CREATE TABLE `dsns` ( `id` int(11) NOT NULL AUTO_INCREMENT, `parent_id` int(11) DEFAULT NULL, `dsn` varchar(255) NOT NULL, PRIMARY KEY (`id`) );
  2. -- 写入从库信息
  3. INSERT INTO dsns (parent_id,dsn) values(1, "h=replica_host,u=checksums,p=password,P=3306");
  4. -- 如果有多个从库,就插入多条记录.
  5. -- 也可以按如下简写
  6. INSERT INTO dsns (parent_id,dsn) values(1, "h=replica_host");

2、pt-table-sync

参数 参数说明 备注
--replicate= 指定通过pt-table-checksum得到的表 默认会创建percona库下checksum表时不需要指定
--databases= 指定执行同步的数据库 在只修复指定的库时使用
--tables= 指定需要被修复的表,多个用逗号隔开  
--sync-to-master 指定一个DSN,即从的IP 会通过show processlist或show slave status 去自动的找主。报错找不到主库时使用
h= u= p= 服务器地址,账号,密码 命令里有2个ip,第一次出现的是Master的地址,第2次是Slave的地址。
--print 打印修复的sql语句 只打印不执行。
--exec 或 --execute 执行修复  
--algorithms=c 指定修复算法
default Chunk,Nibble,GroupBy,Stream 在报错算法问题的时候需要指定算法

--charset= 指定默认字符集 如果数据中包含中文不指定次字符集的话修复不成功

3、输出信息解释

TS :完成检查的时间。
ERRORS :检查时候发生错误和警告的数量。
DIFFS :0表示一致,1表示不一致。当指定--no-replicate-check时,会一直为0,当指定--replicate-check-only会显示不同的信息。
ROWS :表的行数。
CHUNKS :被划分到表中的块的数目。
SKIPPED :由于错误或警告或过大,则跳过块的数目。
TIME :执行的时间。
TABLE :被检查的表名。

八、pt工具常见报错信息

1、监测报错(找不到从库,使用--recursion-method指定模式)

Diffs cannot be detected because no slaves were found. Please read the --recursion-method documentation for information.

2、binlog模式问题(由于指定为row行复制造成 使用--no-check-binlog-format跳过监测,不过这样有可能监测不出来主从不一致的信息,row行模式对于主从来说不需要进行主从监测)

Replica centos-1 has binlog_format ROW which could cause pt-table-checksum to break replication. Please read "Replicas using row-based replication" in the LIMITATIONS section of the tool‘s documentation.  If you understand the risks, specify --no-check-binlog-format to disable this check.

3、没有索引或主键导致的,在数据较少的时候(低于1000行,没有测试出该信息,超过1000行会报错)

Cannot checksum table test.t: There is no good index and the table is oversized. at ./pt-table-checksum line 6370.

4、等待信息,已检测的百分比,这是因为设置了主键但是没有索引导致没有分块且表过大造成。

Checksumming database.table:  27% 01:17 remain

九、对多个库所有数据进行监测结果

pt-table-checksum监测数据库结果:

数据大小 监测花费时间 监测报错的表 原因
93G 30m28.523s
4个


#字符集bug(工具自带,无法解决)

正式平台这些表都没有

    1个
未监测到(中文表名监测不到)

正式平台无此表

    1个 没有主键或者索引(数据条数:132835)

十、pt修复工具pt-table-sync遇到的问题

在使用pt-table-checksum进行检测后,发现主从不一致的情况后可以使用pt-table-sync工具进行修复操作。

其原理为:基于pt-table-checksum监测的结果进行检查并生成修复语句去修复从库中的数据。

遇到的报错:

1、修复时候没有任何提示,但是修复报错。使用–print打印修复语句发现又乱码。

处理方法:查看表的字符集,通过--charset=命令指定默认字符集

2、报错:Failed to prepare TableSyncChunk plugin: Cannot chunk table `zxfly_zxfly1`.`mongo_task_data` using the character column guid, most likely because all values start with the same character. This table must be synced separately by specifying a list of --algorithms without the Chunk algorithm at /usr/local/bin/pt-table-sync line 4088.  while doing table on 192.168.0.177

原因是在默认的算法中,要保证主键字段的数据前一位有不一样字符出现,而该表的主键数据第一个字符是一样的。

解决办法:

使用--algorithms=参数指定算法,当然这种应该最好分库分表进行恢复。

6、修复报错(原因:没有唯一索引或主键导致的,1000以内的,1000行以上没有索引或主键在监测时就会跳过。)

Can‘t make changes on the master because no unique index exists at /usr/local/bin/pt-table-sync line 10591.

时间: 2024-10-11 21:39:08

mysql主从一致性校验工具-pt的相关文章

MySQL主从同步校验工具_pt-table-checksum

注意事项 master和slave必须是同步状态 master show slave hosts; slave show slave status\G;看看是否同步成功 安装 yum install perl perl-devel perl-Time-HiRes perl-DBI perl-DBD-MySQL and? yum -y ?install perl-Time-HiRes and? yum install perl perl-DBI perl-DBD-MySQL perl-IO-Soc

mysql主从同步验证工具

(1).pt-table-checksum 工具名称 (2).安装pt-table-checksum #:wget www.percona.com/downloads/percona-toolkit/2.2.2/percona-toolkit-2.2.2.tar.gz #:tar -xvf percona-toolkit-2.2.2.tar.gz #:perl Makefile.PL # make && make install (3).授权 GRANT update,insert,del

mysql主从数据一致性校验及纠错工具

目录 1.概述 2.percona-tooldit工具的安装 3.新建用户 4.pt-table-checksum使用 5.pt-table-sync使用 6.个人总结 1.概述 假如你是一位运维人员,假如你生产环境上部署了mysql系统,再假如你线上的mysql是基于主从复制的架构,那恭喜你,它将可能会带给你主从数据不一致的"恶运". 由于mysql复制架构原生特性,主从服务器上的数据不可能做"同步"复制,所以延时是必然会有的,即使是不那么繁忙的服务器上,在业务不

MySQL主从同步校验与重新同步

主从复制环境中,可能有种种原因导致主.从库数据不一致的情况,主从一致性也一直是DBA需要关注的问题,校验MySQL的主从一致性一般有多种工具,诸如MySQL自带的checksum.mysqldiff.pt-table-checksum等,每种工具各有优缺,本文就pt-table-checksum工具进行介绍和记录实验环节. 下载二进制版本的percona-toolkit工具箱 https://www.percona.com/downloads/percona-toolkit 本文用的是2.2.1

基于pt-table-checksum和pt-table-sync实现MySQL主从数据一致性校验

在基于MySQL逻辑复制原理的下的主从架构,经常会由于某些缘故产生主从数据不一致,从而导致主从复制进程报错中断.而基于定期去检查从库的show slave status\G的IO线程和SQL线程的状态,只能确认当前replication是正常的,却无法确认当前主从数据是否一致.幸好percona公司提供pt工具包,其中的pt-table-checksum和pt-table-sync相互配合,在基于一定的前提条件下,可以较好的完成主从数据一致性校验和修复,而不会较大程度上影响线上数据库的性能. p

mysql主从数据对比工具简介

1 Checksum 1.1 checksum原理 checksum table的原理是对表中的数据进行一行一行的较验和计算,在执行checksum命令时,表会被加一个读锁(read lock),因此对于大表,这是一个很耗时的过程. 读锁:又叫S锁/共享锁:当MySQL的一个进程为某一表开启读锁之后,其他的进程包含自身都没有权利去修改这表表的内容.但是所有的进程还是可以读出表里面的内容的.但是不能实现更新. 1.2 语法 在数据库中输入checksum  table   库.表: 说明:chec

mysql 主从一致性检查

我上一次遇到MySQL主从服务器数据一致性问题,想想是几年前的事情了,还依稀记得当时惊慌失措的情景,好在最后借助Maatkit解决了问题.几年后,当我再次面对同样的问题时,Maatkit已经不复存在,转而成为了Percona Toolkit的一部分,不变的是我依旧手忙脚乱,所以还是记录一下吧,保不准啥时候又会遇到这个问题. 如果你在MySQL从服务器上遇到类似下面的错误信息,那么恭喜你中招了: mysql> SHOW SLAVE STATUS\G Last_Error: Error 'Dupli

mysql 主从一致性检查以及修复

一.简介: 该软件是由由领先的MySQL咨询公司Percona发布的 Percona的很多软件我只能说是强!!!改公司开发的部分工具软件甚至已经超越oracle 自身所开发的工具软件 因此不用怀疑这个公司开发的软件会不会带来什么风险 pt-table-checksum,pt-table-sync 是percona-toolkit工 具集的工具之一用来检查与修复主从不一致数据之用.它通过在主库执行基于statement模式的sql语句来生成主库数据块的总和校验,把相同的sql语句传递到从库,并在从

主从校验工具pt-table-checksum和pt-table-sync工作原理

pt-table-checksum和pt-table-sync是常用来做MySQL主从数据一致性校验的工具,pt-table-checksum只校验数据,不能对数据进行同步:pt-table-sync不仅可以检验数据,还可以将不一致的数据同步. 工作原理 两个工具的工作原理基本差不多,分开说明.为了说明简单易懂,抛开了所有内部函数,只是简易的介绍一下工具的工作过程. pt-table-checksum工作原理 1.单行数据checksum值的计算 首先检查表结构,获取每列的数据类型,把所有类型都