Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  Cloning for Distributed Recovery

20.5.4.2 分布式恢复中的克隆操作

如果您想在群组中使用远程克隆操作来实现分布式恢复,您必须事先设置现有成员和加入成员,以支持这个功能。如果您不想在群组中使用这个功能,那么 Group Replication 只会从二进制日志中进行状态转移。

要使用克隆操作,至少需要在一个现有群组成员和加入成员上设置好远程克隆操作的支持。最少,您需要在捐赠者和加入成员上安装 clone 插件,并将 replication 用户授予分布式恢复的 BACKUP_ADMIN 权限,以及设置 group_replication_clone_threshold 系统变量到合适的水平。为了确保捐赠者的最大可用性,建议将所有当前和未来群组成员设置为支持远程克隆操作。

请注意,远程克隆操作在加入成员上删除用户创建的表空间和数据,然后从捐赠者中转移数据。如果操作在进行时被停止,加入成员可能会留下部分数据或无数据。这可以通过重试远程克隆操作来修复,Group Replication 会自动重试。

要设置和配置克隆插件,请查看第7.6.7节,“克隆插件”。远程克隆操作的详细前提条件在第7.6.7.3节,“远程数据克隆”中有所述。对于Group Replication,请注意以下关键点和差异:

  • 捐赠者(现有组成员)和受益者(加入的成员)都必须安装并激活克隆插件。要了解如何执行此操作,请查看第7.6.7.1节,“安装克隆插件”

  • 捐赠者和受益者必须在同一个操作系统上运行,并且必须在同一个MySQL Server版本系列中。因此,克隆不适合组成员运行不同minor MySQL Server版本的群组,如MySQL 8.0和8.4。

  • 捐赠者和受益者都必须安装并激活Group Replication插件,并且捐赠者的任何活动插件(例如密钥ring插件)也必须在受益者上活动。

  • 如果分布式恢复配置使用SSL(group_replication_recovery_use_ssl=ON),Group Replication 将应用该设置于远程克隆操作。Group Replication 自动配置克隆SSL选项的设置(clone_ssl_caclone_ssl_certclone_ssl_key)以匹配对应的Group Replication 分布式恢复选项(group_replication_recovery_ssl_cagroup_replication_recovery_ssl_certgroup_replication_recovery_ssl_key)。

  • 您不需要在clone_valid_donor_list系统变量中设置有效的捐赠者列表,以便加入复制组。Group Replication 在选择现有组成员中的捐赠者后自动配置该设置。请注意,远程克隆操作使用服务器的SQL协议主机名和端口。

  • 克隆插件具有管理远程克隆操作网络负载和性能影响的多个系统变量。Group Replication 不会配置这些设置,因此您可以查看它们并将其设置为所需的值,或者允许它们默认。请注意,在使用远程克隆操作进行分布式恢复时,克隆插件的clone_enable_compression设置将应用于该操作,而不是Group Replication 的压缩设置。

  • 为了在接收端 invoke 远程克隆操作,Group Replication 使用了内部的mysql.session用户,该用户已经拥有CLONE_ADMIN特权,因此您不需要设置这项。

  • 作为克隆用户在捐赠者上执行远程克隆操作,Group Replication 使用了您为分布式恢复设置的复制用户(详见第20.2.1.3节,“User Credentials For Distributed Recovery”)。因此,您必须将BACKUP_ADMIN特权授予该复制用户在所有支持克隆的组成员上。同样,在配置组成员为Group Replication时,也需要授予该特权,因为它们可以在加入组后作为捐赠者。该复制用户用于分布式恢复在每个组成员上。要将该特权授予该复制用户在现有成员上,可以在每个组成员上单独执行该语句,或者在一个组成员上启用二进制日志执行该语句:

    GRANT BACKUP_ADMIN ON *.* TO rpl_user@'%';
  • 如果使用START GROUP_REPLICATION在之前使用CHANGE REPLICATION SOURCE TO提供用户凭证的服务器上指定复制用户凭证,确保在远程克隆操作之前从复制元数据存储库中删除用户凭证。同时,在加入成员上设置group_replication_start_on_boot=OFF。有关详细信息,请参阅第20.6.3节,“分布式恢复连接安全”。如果不删除用户凭证,它们将在远程克隆操作中传输到加入成员上。在这种情况下,group_replication_recovery通道可能会无意地使用存储的凭证,在原始成员或从它克隆的成员上启动。服务器引导时自动启动 Group Replication(包括远程克隆操作)将使用存储的用户凭证,如果操作员没有在START GROUP_REPLICATION命令中指定分布式恢复凭证。

在支持克隆的组成员设置完成后,group_replication_clone_threshold 系统变量指定了远程克隆操作在分布式恢复中的阈值,以事务数表示。如果捐赠者和加入成员之间的交易差距大于这个数字,遵循技术可能时将使用远程克隆操作来将状态传输到加入成员中。Group Replication 根据现有组成员的gtid_executed 集合来计算阈值是否已超过。使用远程克隆操作在大交易差距事件中可以让您将新成员添加到组中,而无需手动将组的数据传输到服务器,也使得非常落后的一员能够更高效地追赶。

group_ replication_clone_threshold Group Replication 系统变量的默认设置非常高(事务在 GTID 中的最大允许顺序号),因此它实际上在可能进行状态传输的地方中断了克隆。要使 Group Replication 选择远程克隆操作来传输状态,其中更适合,请将系统变量设置为指定的事务差距上限,您想要在该差距以上启用克隆。

Warning

不要在活动组中使用低设置的group_replication_clone_threshold。如果在远程克隆操作进行时,在组内发生的交易数量超过阈值,加入成员将在重启后触发另一个远程克隆操作,并可能继续这样做直到无限。为了避免这种情况,请确保将阈值设置为您预期在克隆操作完成时组内可能发生的交易数量以上。

Group Replication 尝试执行远程克隆操作,即使您的阈值无法执行状态转移从捐赠者的二进制日志,因为例如,加入成员所需的交易不在任何现有组成员的二进制日志中。Group Replication 根据现有组成员的gtid_purged集合来确定这个情况。你不能使用group_replication_clone_threshold系统变量来停用克隆,当所需的交易不在任何成员的二进制日志文件中,因为在这种情况下,克隆是唯一的选择,以便将数据手动传输到加入成员。

在设置群组成员和连接成员进行克隆时,Group Replication 会自动管理远程克隆操作。远程克隆操作可能需要一些时间来完成,取决于数据的大小。请参阅第7.6.7.10节,“监控克隆操作”以获取关于监控过程的信息。

Note

当状态转移完成时,Group Replication 将重新启动连接成员以完成该过程。如果在连接成员上设置了group_replication_start_on_boot=OFF,例如,因为您在START GROUP_REPLICATION语句中指定了复制用户凭证,您需要手动再次执行START GROUP_REPLICATION。如果设置了group_replication_start_on_boot=ON和其他需要启动Group Replication的设置,则不需要干预该过程将继续自动地将连接成员在线。

远程克隆操作将捐赠者中的表中持久化的设置和数据复制到受益者中。集团复制管理着与集团复制通道相关的设置。集团复制成员在配置文件中持久化的设置,例如集团复制本地地址,不会被克隆,也不会在加入成员上进行更改。集团复制还保留了与使用SSL相关的通道设置,这些设置是唯一的于个体成员。

如果捐赠者在group_replication_recovery复制渠道中使用的 replication 用户凭证已经存储在复制元数据存储库中,使用CHANGE REPLICATION SOURCE TO语句,那么这些凭证将被传输到并在加入的成员中使用,并且必须在那里有效。使用存储的凭证,所有接收远程克隆操作的组成员因此自动接收分布式恢复的 replication 用户和密码。如果您在START GROUP_REPLICATION语句中指定了 replication 用户凭证,这些将用于启动远程克隆操作,但它们不会被传输到并在加入的成员中使用。如果您不想将凭证传输到新加入的成员中,并记录在那里,请确保在远程克隆操作之前将其 unset,正如第20.6.3节,“Securing Distributed Recovery Connections”中所述,并使用START GROUP_REPLICATION提供它们。

如果使用了PRIVILEGE_CHECKS_USER账户来帮助安全地保护复制应用程序(见第19.3.3.2节,“Group Replication Channel的权限检查”),那么PRIVILEGE_CHECKS_USER账户和来自捐赠者的相关设置将被克隆到加入成员。如果加入成员设置为在启动时启动Group Replication,它将自动使用该账户来对适当的复制通道进行权限检查。

Group Replication启动和管理分布式恢复的克隆操作。支持克隆的组成员也可能参与用户手动初始化的克隆操作。例如,您可能想创建一个新的服务器实例,通过从组成员作为捐赠者进行克隆,但您不想新的服务器实例立即加入组或可能永远不加入。

在所有支持克隆的版本中,您可以手动初始化一个克隆操作,该操作涉及Group Replication已停止的组成员。请注意,因为克隆需要捐赠者和接收者的活动插件必须匹配,Group Replication插件必须在其他服务器实例上安装并处于活动状态,即使您不打算让该服务器实例加入组。您可以通过以下语句安装插件:

INSTALL PLUGIN group_replication SONAME 'group_replication.so';

如果克隆操作涉及Group Replication正在运行的组成员,并且克隆操作不删除和替换接收者的数据,那么您可以手动初始化克隆操作。要初始化克隆操作,必须包括DATA DIRECTORY子句,因为Group Replication正在运行。