当 pt-table-sync 失败时查找主从之间的差异

atx*_*dba 6 mysql replication mysql-5.5 percona-tools

我有一个表,根据 pt-table-checksum (PTC),它显示了主从的一些差异。我发现了除此之外的一些验证差异。

混合中的某些表具有复合主键,虽然对于 PTC 来说工作得很好,但与 pt-table-sync (PTS) 并没有太多尝试找出差异。PTS 似乎不尊重 PTC 的新选项来限制复合键搜索的深度。最终结果是一个 5.5Mrow 的桌子在带有 PTS 的情况下旋转了几个小时。我有点相信 PTS 中存在一个无限循环错误,因为输出刚刚开始一遍又一遍地吐出对相同准确记录(此时没有其他任何内容)的更正。

所以,实际上这篇文章更多的是关于替代品,而不是试图让这个工具正常运行。

想到的最直接的替代方法是在 master 上使用读锁刷新表;select * into outfile on master 和 slave;解锁和差异。然而,这张表相当活跃,我无法承受它在主服务器上被锁定那么久。

我希望做一些事情,比如在可重复读隔离级别开始一个事务,然后从那里的主人那里选择出来。但是,我无法找到一种方法来让从服务器像在主服务器上一样在事务历史记录中的某个点处专门停止。开始事务后,诸如 show master status 之类的内容会继续更新,因此在此之前我不能简单地启动 slave。

不能保证“快速”执行“显示主状态;开始;”的原子性。

非阻塞方法的唯一其他解决方案是编写一个自定义脚本,该脚本可能能够更有效地执行 PTS 类型的操作,但具有有关如何生成相关表的列的特定于应用程序的领域知识。

虽然可能会出现这样的情况,当像 PTS 这样的预制轮子没有我想要的那么圆时,我希望为未来找到一个更通用的解决方案。

小智 0

实际上,在同步过程中存在一些有据可查的错误,而这涉及一个或多个从属设备。

在某些情况下,进行大量的更改表,涉及外键更改和/或主键数据格式,所有主服务器都将同步,但从服务器不会同步。

事实上,没有“为什么”?回答。