如何在MySQL / InnoDB主从asynchronous复制设置中执行崩溃恢复?
特别:
如果一个从机崩溃,我把它重新启动后,如何使它与主机同步?
如果主人崩溃,奴隶将成为主人。 如何使新的主站与其他从站同步? 当原来的主人被带回时,我如何与新的主人同步?
由于复制是asynchronous的,因此在发生崩溃之前,已经提交给主服务器的事务可能无法离开主服务器。 所以原来的主人和奴隶之间可能会有不一致,其中之一就会成为新的主人。
同样,被提升为新主人的奴隶在所有奴隶之间可能没有最新的交易。 所以新的主人可以“落后”他的一个奴隶。
我如何解决所有这些潜在的不一致?
任何帮助完成这些任务的工具?
谢谢。
我给它一个镜头:
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”行中提到的错误。
要重新同步旧的主设备,只需将其添加为从设备,并让复制完成。 然后,您可以使系统脱机并切换回旧的主设备。
交易是一个问题。 特别是如果您使用像MyISAM这样的事务不可知的后端。 使用InnoDB应该可以工作。 AFAIK只完成的事务被写入二进制日志,从而写入副本。 这只有在数据库知道您的交易时才适用。
使用前面给出的命令,您可以检查所有从站的状态,并将最新的(提示:Log_Pos)从站升级为主站。 也许只是暂时的,直到所有的奴隶再次新鲜,然后宣传指定的服务器。
就我个人而言,我认为您需要一个特殊的设置(例如,混合广域网和局域网从机,大量的事务查询),使主机崩溃后具有不同中继状态的从机。
我会build议避免像瘟疫一样的MMM。 这是非常危险的软件,并导致更多的停机时间比阻止。 我有丰富的经验,我的公司试图解决它的问题,但它是不可修复的。 我不知道是否适合发布一个链接到我的博客文章,我解释了为什么这是真实的。 MMM的原作者同意,顺便说一句,这是一场灾难。
我build议的主要工具是嗯 。 它处理循环复制,多个从站,故障转移和自动升级到主(和相关的从属指派),所有透明的客户端通过托pipe浮动IP,它的工作很好(我有一个主数据库服务器消失,昨晚由于死开关,而我的客户甚至没有注意到)。
结合嗯,我build议xtrabackup,因为它可以用来设置新的奴隶(也许replace死亡的机器)一个非常快速和优雅的方式,比从SQL转储加载要快得多。
另外,如果你正在压缩你的备份,那么你需要一个备份时间!