我有一个双向复制设置,服务器位于不同的地理位置。复制已中断,但我不想只选择一个作为主服务器。有没有办法恢复复制,使两个数据库重新合并?
答案1
阅读我对这个问题的评论。如果问题只是因为语句出错而导致复制中断(服务器是否运行相同版本的 MySQL?),则可能只需修复问题并重新启动复制即可。
如果问题实际上是主服务器执行了相互不兼容的写入,那么修复起来就比较棘手,而且我认为这无法自动完成。您可能必须查看每台服务器上的二进制日志并手动协调冲突。
但是,将来,您需要做以下两件事之一 - 要么在任何给定时间只让一台服务器接受写入,要么避免使用 auto_increment 键。我推荐前者,因为这样做的效果是,您拥有一台可以在任何给定时间成为活动主服务器的服务器。如果您确实需要让客户端始终写入最近的主服务器,则需要想出一种方法来对键进行分区,以便一个主服务器可以创建一行,其中的主键肯定不会由另一个主服务器使用。
答案2
在您必须解决从属问题之前...您可以重新启动复制。您还可以尝试 maatkit 工具:mk-slave-restart 和 mk-table-checksum。
答案3
简而言之,不是。至少,如果你想保持数据完整性的话。我给 lg 一个 +1 的推荐马特吉特,因为这些工具有助于在恢复后比较数据集。
根据故障情况,你可能需要通读 binlog。你可以使用mysqlbinlog实用程序。您将需要找到在从服务器上执行的最后一个成功查询,使用选择查询进行验证,并与主服务器的 binlog 进行比较以找到位置。这很乏味,但通过练习可以快速完成。
如果您通过“双向复制”来指代双主服务器,那么情况可能会有所不同。典型的双主服务器配置将具有主动/被动。如果主动服务器上的复制中断,您可以指向被动主服务器日志中的最后一个位置(或设置全局跳过计数器),而不会冒主动主服务器上的数据风险。如果被动主服务器复制中断,您将需要花时间处理 binlog。