一、环境
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、我们需要定期或不定期地开展主从复制数据一致性的校验和修复工作
三、主从一致性监测原理
https://www.cnblogs.com/kevingrace/p/6261091.html
四、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= |

本文详细介绍了使用Percona Toolkit工具集中的pt-table-checksum和pt-table-sync进行MySQL主从数据一致性监测与修复的方法。涵盖了环境配置、原理、常见问题及解决方案,包括授权、监测命令、修复操作及监控脚本编写。
最低0.47元/天 解锁文章
845

被折叠的 条评论
为什么被折叠?



