在重新启动主服务器后,为什么MySQL复制无法正常恢复?

时间:2014-02-01 15:05:12

标签: mysql database-replication

我有一个MySQL主从复制。最近托管mysql master的服务器 - 由于一些问题(与mysql无关)重新启动。服务器启动后,我完全没有意识到与从站的同步被破坏(主日志文件名已更改)。我们更新了master数据库结构,并更改了大量数据。大约24小时后,我们意识到奴隶没有新的数据结构和新数据。同步被打破了。

我现在正在尝试修复它,但我想知道 - 为什么不能只是奴隶实例自动拾取主服务器停止时所处的位置(无论出于何种原因)?为什么它实现的方式是奴隶实例完全忘记了重新启动主服务器时发生的事情?

1 个答案:

答案 0 :(得分:2)

如果从站或主站重新启动,则应该从站恢复。

slave在其数据目录中有一个名为relay-log.info的文件,它记录了从属处理的最后一个事件。大多数情况下,这种方法效果很好,奴隶可以从中断的地方恢复。

但是,有很多事情可能会出错:

  • 如果从站崩溃,relay-log.info可能会损坏。出于这个原因,在MySQL 5.6中,他们现在提供了将相同信息存储在防撞安全的InnoDB表而不是文件中的选项。

  • 奴隶可以长时间离线。如果主服务器清除了从服务器停止时读取的二进制日志文件,则从服务器无法继续。奴隶需要读取连续的一系列事件,否则无法确保完整的数据复制。

  • 如果主服务器崩溃,主服务器可能会破坏其二进制日志文件。您可以通过在主服务器上启用sync-binlog配置变量来降低此风险,同时了解它会降低主服务器的性能。

至于“为什么以某种方式实现”,为什么不尝试实现可以​​从崩溃中恢复的复制系统,看看它有多容易? : - )