pt-table-checksum校验主从库数据库数据
pt-table-checksum校验与pt-table-sync,前者主要用于数据的校验,验证主从是否一致,后者主要用来修复数据,两者一般情况结合起来用可以修复数据不一致的问题。
一、pt-table-checksum 安装
下载工具包 的最新地址如下:
https://www.percona.com/downloads/percona-toolkit/LATEST/
安装pt-table-checksum 和pt-table-sync命令。需要先安装percona-toolkit 工具集
1.1percona-toolkit 工具集安装方式介绍:
percona-toolkit 工具安装有3种方式:
第一种是下载二进制包,直接解压包,就可以使用。
第二种是下载源码包,进行编译安装
第三种是rpm包安装
不管是二进制安装还是源码包编译安装,还是rpm包安装,安装前要下载相关的依赖软件包
1.2下载源码包编译安装:
1.3下载二进制包直接解压安装:
二、快速搭建基于Gtid的主从复制
master 192.168.0.39
slave 192.168.0.11
2.1、master上操作:
2.2、slave上操作:
三、创建所需要的链接库的权限
创建pt-table-checksum 和pt-table-sync所需要的操作mysql的账户以及修复数据时,所需要的权限
登陆slave和master(两边都要执行如下SQL)
master(192.168.0.18)
slave(192.168.0.22)
四、模拟演示
4.1创建演示数据环境
master库上新建测试库和测试表,SQL指令如下:
slave查看数据已经同步过来了
slave库修改frame01表数,模拟数据不一致
4.2 pt-table-checksum 演示
在新版本的pt-table-ckecksum不用自己添加checksums表,在pt-table-checksum 表时,会在master库上默认生成percona库和表checksums
默认会在master库上生成库percona和表checksums
4.3、pt-table-checksum 指令参数说明
会把checksums表写入到master 192.168.0.39 的test01库中。登录主库查看
4.4、检测输出结果参数说明
TS :完成检查的时间。
ERRORS :检查时候发生错误和警告的数量。
DIFFS :0表示一致,1表示不一致。当指定–no-replicate-check时,会一直为0,当指定–replicate-check-only会显示不同的信息。
验证演示如下:
原本master 上 test01库和slave上test01库上的数据是不一致的,但是 pt-table-checksum 检测时,加上参数-no-replicate-check后,DIFFS 会始终是0
当指定–replicate-check-only会显示不同的信息:
ROWS :表的行数。
CHUNKS :被划分到表中的块的数目。
SKIPPED :由于错误或警告或过大,则跳过块的数目。
TIME :执行的时间。
TABLE :被检查的表名
4.5、采用dsn方式校验数据:
pt-table-checksum +dsn方式指令参数说明如下:
配置dsn方式校验数据:
登陆192.168.0.39 的·master库创建链接slave库的路由表
DIFFS =1 也是可以看到;master 和slave的test01库中frame01表的数据是不一致的
指令参数简单说明:
第一段的ip,账户,密码和端口,指的是连接主库的账户信息。
h=192.168.0.39,u=ptsum,p=ptchecksums,P=3306
–recursion-method dsn= 采用dsn的链接方式进行校验数据
D=percona,t=dsns, 从 percona库中读取 dsns表中的链接从库的账户信息
第二段的ip,账户,密码和端口,指的是连接从库的账户信息。
h=192.168.0.11,u=ptsum,p=ptchecksums,P=3306
**提示:**此条pt-table-checksum指令是从 从库192.168.0.11上的percona.dsns表读取链接从库的账户信息,和主库192.168.0.39中的test01.frame01表的数据进行比对的。
如果此时登录192.168.0.11从库,删掉slave库percona.dsns表中的数据,然后再进行pt-table-checksum比对的话,会提示连接不上从库,导致检查失败
**报错提示:**Diffs cannot be detected because no slaves were found. Please read the --recursion-method documentation for information.
DIFFS =0 ,然而实际上,master和slave库的test01.frame01表的数据是不一致的,检测比对失败。
** DIFFS =1 说明master和slave数据存在不一致,检测成功
执行如上的命令,是可以检测成功的,原因是:上述的命令是直接从主库192.168.0.39的percona.dsns表中读取的链接slave库的账户信息的**
五、此次演示过程中出现的报错
slave库上操作下面的指令:
解决办法:
pt-table-checksum的数据校验工具到此简单介绍完成。有疑问的,欢迎留言一起交流学习。