MySQL / InnoDB 复制:如何执行崩溃恢复?

MySQL / InnoDB 复制:如何执行崩溃恢复?

如何在 MySQL/InnoDB 主从异步复制设置中执行崩溃恢复?

具体来说:

  1. 如果从属服务器崩溃了,我如何使其重新启动后与主服务器同步?

  2. 如果主服务器崩溃,则从服务器将成为主服务器。如何让新主服务器与其他从服务器同步?当原始主服务器恢复后,如何将其与新主服务器同步?

由于复制是异步的,已提交给主服务器的事务可能无法在崩溃发生之前离开主服务器。因此,原始主服务器和从服务器之间可能存在不一致,其中一个从服务器将成为新的主服务器。

同样,被提升为新主服务器的从服务器可能不具备所有从服务器中最新的交易。因此,新主服务器可能“落后于”其中某个从服务器。

我该如何解决所有这些潜在的不一致问题?

有什么工具可以帮助完成这些任务吗?

谢谢。

答案1

我尝试一下:

  1. 如果从服务器崩溃,然后你将其重新联机,它应该自动与主服务器同步。您可以使用 mysql 命令“SHOW SLAVE STATUS \G”进行检查。特别查看以下几行:
Slave_IO_Running:是
Slave_SQL_Running:是
Last_Errno: 0
最后错误:
落后大师秒数:0

如果看起来像这样,则一切正常。如果 Seconds_Behind_Master > 0,则副本正在追赶。如果 Slave_IO_Running 没有运行,则您遇到了一个不常见的问题,请检查错误日志。如果 Slave_SQL_Running 没有运行,请尝试使用“START SLAVE;”启动它。如果失败,请检查“Last_Error”行中是否提到了错误。

  1. 从属成为主:如果您没有链设置(这可能不是一个好主意)您将需要更改新主和从属的复制配置。

要重新同步旧主服务器,只需将其添加为从服务器并让复制完成。然后,您可以使系统脱机并切换回旧主服务器。

事务是个问题。特别是如果你使用 MyISAM 等事务无关的后端。使用 InnoDB 应该可以。据我所知,只有完成的事务才会写入 binlog,从而写入副本。这仅适用于数据库知道你的事务的情况。

使用前面给出的命令,您可以检查所有从属服务器的状态,并将最新的(提示:Log_Pos)从属服务器提升为主服务器。可能只是暂时的,直到所有从属服务器再次更新,然后提升指定的服务器。

我个人认为您需要一个特殊的设置(例如混合 WAN 和 LAN 从属设备、大量交易查询),以便在主设备崩溃后使从属设备具有不同的中继状态。

答案2

我建议尽量避免使用 MMM。它是一种非常危险的软件,造成的停机时间比它能防止的停机时间要多得多。我对它有丰富的经验,我的公司也曾尝试修复它的问题,但无法修复。我不确定是否应该在我的博客文章中发布一个链接来解释为什么这是真的。顺便说一句,MMM 的原作者也同意这是一场灾难。

答案3

我推荐的主要工具是。它处理循环复制、多个从属服务器、故障转移和自动升级为主服务器(以及相关的从属服务器重新指向),所有这些都通过托管浮动 IP 对客户端透明,并且运行良好(我的一个主数据库服务器昨晚由于交换机死机而消失,而我的客户端甚至没有注意到)。

结合 mmm,我建议备份因为它可以用作一种快速而优雅的方式来设置新的从属服务器(可能用来替换死机的机器),比从 sql 转储加载速度快得多。

另外,如果你要压缩备份,你需要- 它将减少约 80% 的备份时间!

相关内容