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库表结构及用法为:
- CREATE TABLE `dsns` ( `id` int(11) NOT NULL AUTO_INCREMENT, `parent_id` int(11) DEFAULT NULL, `dsn` varchar(255) NOT NULL, PRIMARY KEY (`id`) );
- -- 写入从库信息
- INSERT INTO dsns (parent_id,dsn) values(1, "h=replica_host,u=checksums,p=password,P=3306");
- -- 如果有多个从库,就插入多条记录.
- -- 也可以按如下简写
- 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的地址。 |
| 打印修复的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.
mysql主从一致性校验工具-pt的更多相关文章
- Mysql 主从一致校验工具------Maatkit工具包
Maatkit工具包 http://www.maatkit.org/ 简介 maatkit是一个开源的工具包,为mysql日常管理提供了帮助.目前,已被Percona公司收购并维护.其中: mk-ta ...
- MySQL主从同步校验与重新同步
主从复制环境中,可能有种种原因导致主.从库数据不一致的情况,主从一致性也一直是DBA需要关注的问题,校验MySQL的主从一致性一般有多种工具,诸如MySQL自带的checksum.mysqldiff. ...
- mysql 主从一致性检查
我上一次遇到MySQL主从服务器数据一致性问题,想想是几年前的事情了,还依稀记得当时惊慌失措的情景,好在最后借助Maatkit解决了问题.几年后,当我再次面对同样的问题时,Maatkit已经不复存在, ...
- mysql 主从数据校验
使用工具pt-table-checksum: /usr/bin/pt-table-checksum --user=root --password='mysqlpass' --host=127.0.0. ...
- 主从校验工具pt-table-checksum和pt-table-sync工作原理
pt-table-checksum和pt-table-sync是常用来做MySQL主从数据一致性校验的工具,pt-table-checksum只校验数据,不能对数据进行同步:pt-table-sync ...
- MySQL主从配置详解
一.mysql主从原理 1. 基本介绍 MySQL 内建的复制功能是构建大型,高性能应用程序的基础.将 MySQL 的 数亿分布到到多个系统上去,这种分步的机制,是通过将 MySQL 的某一台主机的数 ...
- (5.10)mysql高可用系列——percona-toolkit工具下的pt-table-checksum 在线验证主从一致性【续写中】
关键词:percona-toolkit 工具包中包含 pt-table-checksum工具,在线验证主从一致性 [1]percona-toolkit 工具包 [1.1]percona-toolkit ...
- mysql 案例 ~ pt校验工具介绍
简介:今天咱们来聊聊PT校验工具pt-table-checksum 注意事项: 1. 根据测试,需要一个即能登录主库,也能登录从库的账号: 2. 只能指定一个host,必须为主库的IP: ...
- pt-table-checksum校验mysql主从数据一致性
主从数据的一致性校验是个头疼的问题,偶尔被业务投诉主从数据不一致,或者几个从库之间的数据不一致,这会令人沮丧.通常我们仅有一种办法,热备主库,然后替换掉所有的从库.这不仅代价非常大,而且类似治标不治本 ...
随机推荐
- php代码规范->如何写出规范且易于理解的项目代码-ZX版
2019年5月17日10:50:12 前序: 目前是想到哪写到哪,后面有时间在整理成具体文章 很多时候,PHP代码风格过于自由,导致一个项目有N多种写法风格,有些人为了自己认为的技术"高&q ...
- cshtml 中的 AppState = Context.Application 和 控制器中的 Application 也相等
AppState = Context.Application @{ ViewBag.Title = "Home Page"; AppState["s1"] = ...
- vba实现工具的序列号验证框架
对于密码破译方面笔者不太懂,之前对于各种序列号的激活也有些臆测,自己根据想法做了个序列号验证的小框架,以后做的工具也可以用之保护一下下... 主要思路是:用户打开小工具后,系统检测是否已激活,如果未激 ...
- jdk7中hashmap实现原理和jdk8中hashmap的改进方法总结
1. HashMap的数据结构 数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端. 数组 数组存储区间是连续的,占用内存严重,故空间复杂的很大.但数组的二分查找时间复杂度小,为O(1 ...
- C++ 定义一个指针类型
#include <iostream>using namespace std; int main(){ int a= 10; //定义变量a int * p ; //定义个指针P p = ...
- 常用SQL指令
SQL去重复语句:select 改为Delete select * from TRWTC01 where ITEM_NAME in (select ITEM_NAME from TRWTC01 gro ...
- ubuntu 使用阿里云镜像源快速搭建kubernetes 1.15.2集群
一.概述 搭建k8s集群时,需要访问google,下载相关镜像以及安装软件,非常麻烦. 正好阿里云提供了k8s的更新源,国内用户就可以直接使用了. 二.环境介绍 操作系统 主机名 IP地址 功能 配置 ...
- Codeforces Round #596 (Div. 1, based on Technocup 2020 Elimination Round 2)
(第一把div1心态崩了,给大家表演了一把上蓝) (看来以后div1需要先读前三题,如果没把握切掉还是不要交了……) A: 题意是求最少用几个形如$2^{t}+p$的数拼出n,给定n和p.$n\leq ...
- Kafka理解
1. 引言 最近使用Kafka做消息队列时,完成了基本的消息发送与接收,已上线运行.一方面防止出现Bug时自己不能及时定位问题,一方面网上的配置可能还可以更加优化,决定去了解下Kafka. 2. 配置 ...
- Hive学习笔记(三)—— 数据类型
Hive的基本使用(一)--数据类型 1. Hive的基本数据类型 Hive数据类型 Java数据类型 长度 例子 TINYINT byte 1byte有符号整数 20 SMALINT short 2 ...