# 18.5.4分布式恢复

18.5.4.1用于分布式恢复的连接

18.5.4.2用于分布式恢复的克隆

18.5.4.3配置分布式恢复

18.5.4.4分布式恢复的容错

18.5.4.5分布式恢复的工作原理

每当一个成员加入或重新加入复制组时,它都必须赶上该组成员在加入前或离开时应用的事务。这个过程称为分布式恢复。

加入成员首先检查中继日志中的组复制应用程序已从集团收到但尚未应用的任何交易的渠道。如果加入成员以前在该组中,它可能会在离开前发现未申请的交易,在这种情况下,它会首先应用这些交易。新加入该组织的成员没有任何申请。

在此之后,加入成员连接到在线现有成员以执行状态转移。加入成员转让现有成员(称为捐赠者)。接下来,加入成员将应用此状态转移过程中在组中发生的事务。此过程完成后,加入成员已赶上组中其余的服务器,并开始正常加入组。

组复制使用以下方法组合在分布式恢复期间进行状态传输:

  • 使用克隆插件的函数进行远程克隆操作,MySQL 8.0.17提供此功能。要启用此状态传输方法,必须在组成员和加入成员上安装克隆插件。组复制自动配置所需的克隆插件设置并管理远程克隆操作。

  • 从捐助方的二进制日志复制并在加入成员上应用事务。此方法使用一个名为组\u复制\u恢复这是在捐助者和加入成员之间建立的。

    组复制在发出后自动选择这些方法的最佳组合以进行状态传输启动组\u复制在加入成员上。为此,组复制检查哪些现有成员适合作为捐助者,连接成员需要来自捐助者的多少交易,以及任何组成员的二进制日志文件中是否不再存在任何必需的事务。如果连接成员和适当的捐助方之间的事务间隙较大,或者如果任何捐助方的二进制日志文件中没有某些必需的事务,则组复制将开始通过远程克隆操作进行分布式恢复。如果没有大的事务间隙,或者如果未安装克隆插件,则组复制直接从捐赠者的二进制日志进行状态传输。

  • 在远程克隆操作期间,将删除连接成员上的现有数据,并用捐赠者数据的副本替换。当远程克隆操作完成并重新启动加入成员时,将执行从捐赠者的二进制日志进行状态传输,以获取在远程克隆操作进行时应用组的事务。

  • 在从捐助方的二进制日志进行状态传输期间,加入成员从捐赠者的二进制日志复制并应用所需的事务,并在收到事务时应用这些事务,直到加入成员加入组的二进制日志记录点(视图更改事件)。在进行此操作时,加入成员缓冲组应用的新事务。当从二进制日志中进行状态传输完成时,连接成员将应用缓冲事务。

    当加入成员与所有集团的交易都是最新的时,它将在线声明,并可以作为正常成员参与组,分布式恢复完成。

小费

从二进制日志中进行状态传输是组复制的分布式恢复的基本机制,如果复制组中的捐赠者和加入成员未设置为支持克隆,则这是唯一可用的选项。由于二进制日志的状态传输基于经典的异步复制,如果加入组的服务器根本没有组的数据,或者从非常旧的备份映像中获取数据,可能需要很长时间。因此,在这种情况下,建议在向组中添加服务器之前,通过传输组中已存在的服务器的最近快照来设置它,并将其与组的数据一起设置。这将减少分布式恢复所需的时间,并减少对捐助服务器的影响,因为它们必须保留和传输更少的二进制日志文件。