数据库
首页 > 数据库> > mysql-处理Slave意外停止

mysql-处理Slave意外停止

作者:互联网

处理副本意外停止

为了使复制对服务器意外停止(有时被描述为崩溃安全)具有弹性,副本必须有可能在停止之前恢复其状态。本节介绍复制期间副本意外停止的影响,以及如何配置副本以获得最佳恢复机会以继续复制。

副本意外停止后,重新启动时,复制 SQL 线程必须恢复有关哪些事务已执行的信息。恢复所需的信息存储在副本的应用程序元数据存储库中。在较旧的 MySQL 服务器版本中,此存储库只能作为在应用事务后更新的数据目录中的文件创建。在 MySQL 5.7 中,您可以改为使用InnoDB名为的表 mysql.slave_relay_log_info存储应用程序元数据存储库。作为一个表,对应用程序元数据存储库的更新与事务一起提交,这意味着记录在该存储库中的副本进度信息始终与应用于数据库的信息一致,即使在服务器意外停止的情况下也是如此。要将 MySQL 5.7 配置为将应用程序元数据存储库存储为 InnoDB表,请将系统变量设置 relay_log_info_repositoryTABLE. 有关应用程序元数据存储库的更多信息,请参阅第 16.2.4 节,“中继日志和复制元数据存储库”

副本从意外停止中恢复的恢复过程因副本的配置而异。恢复过程的细节受所选择的复制方法、副本是单线程还是多线程以及相关系统变量的设置的影响。恢复过程的总体目标是确定在意外停止发生之前已在副本的数据库上应用了哪些事务,并检索和应用副本在意外停止后错过的事务。

使用基于 GTID 的复制可以最轻松地将复制配置为对意外停止具有弹性。GTID 自动定位意味着副本可以可靠地识别和检索丢失的事务,即使应用事务的顺序存在间隙。

以下信息提供了适用于不同类型副本的设置组合,以保证在复制控制下的恢复。

重要的

复制控制之外的一些因素可能会对复制恢复过程和恢复过程后复制的整体状态产生影响。特别是,影响单个存储引擎恢复过程的设置可能会导致事务在副本意外停止的情况下丢失,因此无法用于复制恢复过程。在 innodb_flush_log_at_trx_commit=1 下面的列表中提到的设置是一个复制设置一键设置,使用InnoDB 与交易。但是,其他特定于 InnoDB或其他存储引擎,尤其是与刷新或同步相关的存储引擎,也会产生影响。始终检查并应用您选择的存储引擎提出的有关崩溃安全设置的建议。

副本上的以下设置组合对意外停止最具弹性:

对于多线程副本,从 MySQL 5.7.13 开始,设置会 relay_log_recovery = ON 自动处理从中继日志执行的事务序列中的任何不一致和间隙。当使用基于文件位置的复制时,可能会出现这些间隙。(有关更多详细信息,请参阅 第 16.4.1.32 节,“复制和事务不一致”。)中继日志恢复过程使用与 START SLAVE UNTIL SQL_AFTER_MTS_GAPS声明会。当副本达到一致的无间隙状态时,中继日志恢复过程继续从复制 SQL 线程位置开始从源获取更多事务。在 MySQL 5.7.13 之前的 MySQL 版本中,此过程不是自动的,需要使用 启动服务器 relay_log_recovery = OFF,使用 启动副本 START SLAVE UNTIL SQL_AFTER_MTS_GAPS以修复任何事务不一致,然后使用 重新启动副本 relay_log_recovery = ON。当使用基于 GTID 的复制时,从 MySQL 5.7.28 开始,多线程副本首先检查是否 MASTER_AUTO_POSITION设置为 ON,如果是,则省略计算应跳过或不跳过的事务的步骤,以便恢复过程不需要旧的中继日志。

标签:事务,副本,Slave,log,中继,复制,mysql,意外,日志
来源: https://blog.csdn.net/qq_22648091/article/details/118254419