MySQL 差异转储?还有其他恢复策略吗?

MySQL 差异转储?还有其他恢复策略吗?

是否有可能在mysqldump两个数据库之间生成差异转储,或者理想情况下,在一个数据库和该数据库的转储版本之间生成差异转储?

这是我遇到的问题 - 我有一个 MySQL 的主动/被动 HA 镜像,实际的数据库数据(物理 MyISAM 文件、索引等)驻留在共享 DRBD 镜像上。上周,主节点发生故障,DRBD 主节点从主节点转移到辅助节点,服务接管按预期进行。

当然,大量更改已被写入 DRBD 镜像的辅助副本版本,因此当主副本恢复时,它将接管 DRBD 卷,但双方都认为它们的一半“不同步”(即StandAlone)。

因此,现在我遇到的情况是数据库中发生了两组不同的事务:

  • 主节点关闭且数据正在写入辅助节点时发生的事情;

  • 自主节点恢复并再次接管服务以来,它们从未同步过!

DRBD 使我能够将镜像的“一半”(处于其当前分区状态)恢复为“主”修订版,但可以看出,无论哪种方式都会导致我丢失数据。

哦,是的:没有复制,也没有本地事务日志,因此没有 binlog 可以重放。哎呀。 捂脸

当然,有夜间备份,所以我可以将数据库恢复到去年凌晨 2 点左右的任何状态。

我想我想要做的是恢复到现在辅助“一半”上的数据库版本(即主数据库关闭时发生的更改),然后尝试以某种方式将从那时起的状态更改累积应用于主“一半”上数据库的当前状态。

问题是,我不知道如何在不重放事务日志的情况下解决这个问题。

感谢您的见解,提前致谢!

答案1

哎哟。情况真糟糕。我希望你现在已经打开了 binlogging...

两个可能有帮助的工具:

  • MySQLdiff- 也许有效。
  • 马特吉特- 先看看这个。我认为它实际上有一些旨在帮助解决裂脑问题的工具。

答案2

您不需要在发生故障的服务器上重放数据。这种情况称为裂脑,您需要告诉 DRBD 您希望它做什么。

http://www.drbd.org/users-guide/s-resolve-split-brain.html

编辑:没想到你说主服务器已经恢复在线……不太确定。二进制日志应该包含服务器执行的所有事务的记录。

編輯 (第 2 遍):我需要在发帖之前仔细阅读整个问题... :( 抱歉

相关内容