mysql 核对 主从_mysql主从一致性检查&修复

本文介绍了在MySQL主从环境中,如何使用Percona Toolkit的pt-table-checksum和pt-table-sync工具检查并修复主从数据不一致的问题。通过模拟主从不同步,详细展示了从环境安装、权限配置、主从同步检查到数据修复的完整过程。
摘要由CSDN通过智能技术生成

1.前言

在mysql数据库主从环境,总会出现各种原因,导致数据库主从环境的不一致;本文就是介绍在mysql数据库主从出现了不一致的情况,如何进行修复,保持数据的一致性。

本文使用:percona-toolk,这个工具包提供pt-table-checksum(检查数据),pt-table-sync修复数据两个命令行工具来实现mysql数据库主从的检查以及修复,在网上分享的mysql主从一致性检查原理的技术上,添加了实战操作部分。

2.使用pt-table-checksums检查主从同步一致性

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

pt工具选择智能分析表上的索引,然后把表的数据split成一个个chunk,计算的时候也是以chunk为单位。每一次对chunk进行checksum后,pt工具都会对耗时进行统计分析,并智能调整下一个chunk的大小,避免chunk太大对线上造成影响,同时也要避免chunk太小而效率低下。

3.使用pt-table-sync修复主从不一致

使用pt-table-sync修复主从不一致,它用来修复多个实例之间数据的不一致。它可以让主从的数据修复到最终一致,也可以使通过应用双写或多写的多个不相关的数据库实例修复到一致。同时它还内部集成了pt-table-checksum的校验功能,可以一边校验一边修复,也可以基于pt-table-checksum的计算结果来进行修复。

4.实战修复主从不一致

4.1.模拟主从不同步

手动在主库建立一个willtest的表,并且在从库使用root用户删除willtest表中的一行数据,来模拟主从故障。

主库数据如下:

MariaDB [cms]> select * from willtest;

+-------+-------+

| test1 | test2 |

+-------+-------+

| 1 | 2 |

| 2 | 3 |

| 3 | 4 |

| 4 | 5 |

+-------+-------+

从库数据如下:

MariaDB [cms]> select * from willtest;

+-------+-------+

| test1 | test2 |

+-------+-------+

| 2 | 3 |

| 3 | 4 |

| 4 | 5 |

+-------+-------+

4.2.环境安装

1、安装percona-toolk,这个工具包提供pt-table-checksum(检查数据),pt-table-sync(修复数据)两个命令行工具

wget https://www.percona.com/downloads/percona-toolkit/2.1.8/percona-toolkit-2.1.8-1.noarch.rpm

rpm -ivh percona-toolkit-2.1.8-1.noarch.rpm

2、创建检查用户(主从库都需要创建),需要有修复库的和percona库的所有权限

GRANT all ON *.* TO 'will'@'%' IDENTIFIED BY 'will';

3、设置mysql主从同步percona数据库

# vim /etc/my.cnf

replicate_do_db=percona

4.3.主从同步检查

在mysql主库执行如下命令来验证主从是否同步:

# pt-table-checksum --user=will --password=will --host=192.168.10.51 --databases=cms --no-check-binlog-format --no-check-replication-filters

执行结果如下:主要看DIFFS字段值,如果不为零说明有数据不一致的情况

1705188c85d53f1a32dd19ecf9e08df5.png

参数说明:

执行结果显示参数意义:

TS :完成检查的时间。

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

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

ROWS :表的行数。

CHUNKS :被划分到表中的块的数目。 比如个表N条记录,那么会分成几十个chunks 每个N行的去检测

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

TIME :执行的时间。

TABLE :被检查的表名。

4.4.主从同步修复

根据校验结果,查看与主库不一致修复语句

9420d12b22b8c6a91bb3ef7314d12e17.png

也可以使用–execute选项直接修复

# pt-table-sync --replicate=percona.checksums --databases=cms --sync-to-master h='192.168.10.52',P='3306',u='will',p='will' --execute

修复完成,再重新校验一次,可以看到主从数据已经正常了

7aad2e0319566082ef13a3c81d2d70e5.png

喜欢 (1)or分享 (0)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值