有没有简单的方法来合并一个破碎的双向MySQL复制

我有一个双向复制设置,与地理上不同的服务器。 复制已经打破,但我不想只select一个作为主。 有没有办法以两种数据库重新合并的方式来恢复复制?

阅读我对这个问题的评论。 如果问题只是由于声明变差而导致复制中断(是否运行相同版本的MySQL的服务器?),则可能只是解决问题并重新启动复制。

如果问题实际上是主人已经执行了互不兼容的写入,那么这是一个更复杂的修复,我不认为这可以自动完成。 您可能需要查看每个服务器上的二进制日志,并手动协调冲突。

但是,在将来,您需要执行以下两项操作之一 – 或者只有一台服务器在任何给定的时间接受写入操作,或者避免使用auto_increment键。 我推荐前者,因为效果是你有一台服务器可以在任何时候成为活跃的主人。 如果你真的需要让客户端总是写信给最近的主服务器,那么你需要想出一种方法来分割这些密钥,这样一个主服务器就可以创build一个主密钥,而另一个主服务器肯定不会使用这个主密钥。

在必须解决从站上的问题之前,您可以重新启动复制。 你也可以尝试maatkit工具:mk-slave-restart和mk-table-checksum。

总之,没有。 至less,如果你想维护数据的完整性。 我给LG提供了一个推荐maatkit的+1,因为这些工具可以帮助比较一旦恢复的数据集。

取决于它是如何被破坏的,你可能需要阅读binlog。 你可以使用mysqlbinlog工具来实现这个function。 您将希望查找在从站上执行的最后一个成功查询,使用select查询进行validation,并与主站的binlog进行比较以查找位置。 这是乏味的,但通过实践,它可以很快。

如果你的意思是“双向复制”,双方的情况可能会有所不同。 典型的双主configuration将具有主动/被动。 如果复制在活动服务器上死亡,则可以指向被动主日志中的最后一个位置(或设置全局跳转计数器),而不会冒用活动主服务器上的数据的风​​险。 如果被动主复制中断,则需要花费时间在binlog中。