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

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

特别:

  1. 如果一个从机崩溃,我把它重新启动后,如何使它与主机同步?

  2. 如果主人崩溃,奴隶将成为主人。 如何使新的主站与其他从站同步? 当原来的主人被带回时,我如何与新的主人同步?

由于复制是asynchronous的,因此在发生崩溃之前,已经提交给主服务器的事务可能无法离开主服务器。 所以原来的主人和奴隶之间可能会有不一致,其中之一就会成为新的主人。

同样,被提升为新主人的奴隶在所有奴隶之间可能没有最新的交易。 所以新的主人可以“落后”他的一个奴隶。

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

任何帮助完成这些任务的工具?

谢谢。

我给它一个镜头:

  1. 如果从站崩溃,并将其重新联机, 则应自动与主站同步。 您可以使用mysql命令“SHOW SLAVE STATUS \ G”进行检查。 特别看这句话:
  Slave_IO_Running:是的
 Slave_SQL_Running:是的
 Last_Errno:0
 Last_Error: 
 Seconds_Behind_Master:0 

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

  1. 一个奴隶成为主人:如果你没有链设置(这可能不是一个好主意),你需要改变新主人和奴隶的复制configuration。

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

交易是一个问题。 特别是如果您使用像MyISAM这样的事务不可知的后端。 使用InnoDB应该可以工作。 AFAIK只完成的事务被写入二进制日志,从而写入副本。 这只有在数据库知道您的交易时才适用。

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

就我个人而言,我认为您需要一个特殊的设置(例如,混合广域网和局域网从机,大量的事务查询),使主机崩溃后具有不同中继状态的从机。

我会build议避免像瘟疫一样的MMM。 这是非常危险的软件,并导致更多的停机时间比阻止。 我有丰富的经验,我的公司试图解决它的问题,但它是不可修复的。 我不知道是否适合发布一个链接到我的博客文章,我解释了为什么这是真实的。 MMM的原作者同意,顺便说一句,这是一场灾难。

我build议的主要工具是嗯 。 它处理循环复制,多个从站,故障转移和自动升级到主(和相关的从属指派),所有透明的客户端通过托pipe浮动IP,它的工作很好(我有一个主数据库服务器消失,昨晚由于死开关,而我的客户甚至没有注意到)。

结合嗯,我build议xtrabackup,因为它可以用来设置新的奴隶(也许replace死亡的机器)一个非常快速和优雅的方式,比从SQL转储加载要快得多。

另外,如果你正在压缩你的备份,那么你需要一个备份时间!