【问题标题】:Why MySQL replication fails to resume correctly after master server is re-booted?为什么主服务器重启后 MySQL 复制无法正确恢复?
【发布时间】:2014-02-01 15:05:11
【问题描述】:

我有一个 MySQL 主从复制。最近托管 mysql 主服务器的服务器 - 由于某些问题(与 mysql 无关)而重新启动。服务器启动后,我完全没有意识到与从属设备的同步被破坏(主日志文件名已更改)。我们更新了主数据库结构,加上很多数据变化。大约 24 小时后,我们意识到从站没有新的数据结构和新数据。同步中断。

我现在正在尝试修复它,但我想知道 - 为什么从属实例不能在主服务器停止时自动拾取它离开的位置(无论出于何种原因)?为什么它以这样的方式实现,当主服务器重新启动时,从属实例完全不知道发生了什么?

【问题讨论】:

    标签: mysql database-replication


    【解决方案1】:

    如果副本或主服务器重新启动,副本应该会恢复。

    副本在其数据目录中有一个名为relay-log.info 的文件,该文件记录了该副本处理的最后一个事件。大多数情况下,这很有效,副本可以从中断的地方继续。

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

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

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

    • 如果主服务器崩溃,主服务器可能会损坏其二进制日志文件。您可以通过在 master 上启用 sync-binlog 配置变量来降低这种风险,但要知道它会降低 master 上的性能。

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

    【讨论】:

      猜你喜欢
      • 2011-05-18
      • 1970-01-01
      • 1970-01-01
      • 2018-05-21
      • 2014-04-23
      • 1970-01-01
      • 1970-01-01
      • 2020-11-22
      • 2020-04-06
      相关资源
      最近更新 更多