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

问题描述 投票:2回答:1

我有一个MySQL主从复制。最近,托管mysql master的服务器-由于某些问题(与mysql不相关)而重新启动。服务器启动后,我完全不知道与从服务器的同步中断(主日志文件名已更改)的事实。我们更新了主数据库结构,并更改了许多数据。大约24小时后,我们意识到从站没有新的数据结构和新的数据。同步中断。

我现在正在尝试对其进行修复,但是我想知道-为什么当主服务器停止时(无论出于何种原因),为什么从属实例不能仅自动选择它离开的位置?为什么以这种方式实现,以使从属实例完全无法掌握重新启动主服务器时发生的情况?]

mysql database-replication
1个回答
2
投票

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

副本在其数据目录中有一个名为relay-log.info的文件,该文件记录副本处理的最后一个事件。在大多数情况下,此方法运行良好,并且副本可以在中断处恢复。

但是,很多事情都会出错:

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.