### 18.5.4分布式恢复 [18.5.4.1用于分布式恢复的连接](group-replication-distributed-recovery-connections.html) [18.5.4.2用于分布式恢复的克隆](group-replication-cloning.html) [18.5.4.3配置分布式恢复](group-replication-tuning-recovery.html) [18.5.4.4分布式恢复的容错](group-replication-distributed-recovery-fault.html) [18.5.4.5分布式恢复的工作原理](group-replication-view-changes.html) [](<>) 每当一个成员加入或重新加入复制组时,它都必须赶上该组成员在加入前或离开时应用的事务。这个过程称为分布式恢复。 加入成员首先检查中继日志中的`组复制应用程序`已从集团收到但尚未应用的任何交易的渠道。如果加入成员以前在该组中,它可能会在离开前发现未申请的交易,在这种情况下,它会首先应用这些交易。新加入该组织的成员没有任何申请。 在此之后,加入成员连接到在线现有成员以执行状态转移。加入成员转让现有成员(称为*捐赠者*)。接下来,加入成员将应用此状态转移过程中在组中发生的事务。此过程完成后,加入成员已赶上组中其余的服务器,并开始正常加入组。 组复制使用以下方法组合在分布式恢复期间进行状态传输: - 使用克隆插件的函数进行远程克隆操作,MySQL 8.0.17提供此功能。要启用此状态传输方法,必须在组成员和加入成员上安装克隆插件。组复制自动配置所需的克隆插件设置并管理远程克隆操作。 - 从捐助方的二进制日志复制并在加入成员上应用事务。此方法使用一个名为`组\u复制\u恢复`这是在捐助者和加入成员之间建立的。 组复制在发出后自动选择这些方法的最佳组合以进行状态传输[`启动组\u复制`](start-group-replication.html)在加入成员上。为此,组复制检查哪些现有成员适合作为捐助者,连接成员需要来自捐助者的多少交易,以及任何组成员的二进制日志文件中是否不再存在任何必需的事务。如果连接成员和适当的捐助方之间的事务间隙较大,或者如果任何捐助方的二进制日志文件中没有某些必需的事务,则组复制将开始通过远程克隆操作进行分布式恢复。如果没有大的事务间隙,或者如果未安装克隆插件,则组复制直接从捐赠者的二进制日志进行状态传输。 - 在远程克隆操作期间,将删除连接成员上的现有数据,并用捐赠者数据的副本替换。当远程克隆操作完成并重新启动加入成员时,将执行从捐赠者的二进制日志进行状态传输,以获取在远程克隆操作进行时应用组的事务。 - 在从捐助方的二进制日志进行状态传输期间,加入成员从捐赠者的二进制日志复制并应用所需的事务,并在收到事务时应用这些事务,直到加入成员加入组的二进制日志记录点(视图更改事件)。在进行此操作时,加入成员缓冲组应用的新事务。当从二进制日志中进行状态传输完成时,连接成员将应用缓冲事务。 当加入成员与所有集团的交易都是最新的时,它将在线声明,并可以作为正常成员参与组,分布式恢复完成。 小费 从二进制日志中进行状态传输是组复制的分布式恢复的基本机制,如果复制组中的捐赠者和加入成员未设置为支持克隆,则这是唯一可用的选项。由于二进制日志的状态传输基于经典的异步复制,如果加入组的服务器根本没有组的数据,或者从非常旧的备份映像中获取数据,可能需要很长时间。因此,在这种情况下,建议在向组中添加服务器之前,通过传输组中已存在的服务器的最近快照来设置它,并将其与组的数据一起设置。这将减少分布式恢复所需的时间,并减少对捐助服务器的影响,因为它们必须保留和传输更少的二进制日志文件。