技术分享 | 两个单机 MySQL 该如何校验数据一致性

对于两个独立的MySQL认证,使用主从环境是最简单的。

使用 DSN 从库连接并运行身份验证脚本。

环境不是主人,寻找支持该环境的工具。

连接主键表并使用索引检查数据。
别搞错了。

验证该工具,不要锁定它,它会影响您的业务。

它必须能够验证表结构、支持并行性并且不使用网络。

可以定期运行,可以在任意两台机器上进行验证。

时间到了就停下来,不要被卡住。

通过主键检查,与校验和比较。

参数可以调整块大小、时间和并行数。

使用时,向用户写说明。

运行后会有日志可以看到结果。

称一下体重。

mysql主从复制数据不一致怎么办

2 02 2 年,在某城市、某公司,遇到了MySQL主从复制数据不一致的问题。
起初,我很困惑,不知道从哪里开始。
后来我认识到必须按照排查、修复、预防三个步骤进行。

首先检查了字符集配置,发现主从库服务器级、数据库级、表级、字段级字符集均为utf8 mb4 ,没有问题。
但是用SHOWVARIABLESLIKE 'character_set_%'和SHOWCREATETABLE确认时,发现从库的字符集设置错误。
我赶紧使用SHOWSLAVESTATUSG命令,发现从机IO线程使用的字符集是错误的。

然后分析binlog和复制模式。
我推荐使用ROW格式的binlog和mysqlbinlog来分析日志内容。
我还检查了复制模式,发现半同步复制降低了数据丢失的风险。

为了检测数据一致性,我使用了 pt-table-checksum 和 mysqldbcompare 工具。
结果发现数据不一致。
我有点极端,心想,我该怎么办?
修复方案,如果数据严重不一致,建议重新初始化从库。
使用mysqldump备份主库数据,添加--single-transaction--master-data=2 参数,从从库导入备份并重新配置复制。
如果只是本地不一致,我用pt-table-sync工具直接修复差异数据,不过得先备份一下。

在紧急情况下,我可以跳过错误事件,但这可能会导致永久性的数据不一致,并且只能用于非核心业务。

预防措施,在配置优化方面,我让主库binlog采用ROW格式,保证主从库版本一致,从库设置为只读。
在监控和维护方面,我定期使用 pt-table-checksum 来验证数据并监控复制延迟和错误日志。
在复制模式选择上,对于一致性要求较高的场景,我采用半同步复制。

我从这个过程中学到了很多东西。
虽然有点繁琐,但关键是要小心。