文档主页
MySQL 9.0 参考手册
相关文档 下载此手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  分布式恢复的克隆

20.5.4.2 分布式恢复的克隆

如果要使用远程克隆操作进行组中的分布式恢复,则必须事先设置好现有成员和加入成员以支持此功能。如果不想在组中使用此功能,请不要进行设置,在这种情况下,组复制仅使用来自二进制日志的状态传输。

要使用克隆,至少要事先设置好一个现有组成员和加入成员以支持远程克隆操作。至少,必须在捐赠者和加入成员上安装克隆插件,将 BACKUP_ADMIN 权限授予用于分布式恢复的复制用户,并将 group_replication_clone_threshold 系统变量设置为适当的级别。为了确保捐赠者的最大可用性,建议将所有当前和将来的组成员都设置为支持远程克隆操作。

请注意,远程克隆操作会在从捐赠者传输数据之前从加入成员中删除用户创建的表空间和数据。如果操作在进行中停止,加入成员可能会留下部分数据或无数据。这可以通过重试远程克隆操作来修复,组复制会自动执行此操作。

20.5.4.2.1 克隆的先决条件

有关设置和配置克隆插件的完整说明,请参阅 第 7.6.7 节,“克隆插件”第 7.6.7.3 节,“克隆远程数据” 中涵盖了远程克隆操作的详细先决条件。对于组复制,请注意以下关键要点和差异

  • 捐赠者(现有组成员)和接收者(加入成员)必须安装并激活克隆插件。有关执行此操作的说明,请参阅 第 7.6.7.1 节,“安装克隆插件”

  • 捐赠者和接收者必须运行在相同的操作系统上,并且必须在同一 MySQL Server 版本系列上。因此,克隆不适合成员运行不同次要 MySQL Server 版本的组,例如 MySQL 8.0 和 8.4。

  • 捐赠者和接收者必须安装并激活组复制插件,并且捐赠者上激活的任何其他插件(例如密钥环插件)也必须在接收者上激活。

  • 如果分布式恢复配置为使用 SSL (group_replication_recovery_use_ssl=ON),则组复制会将此设置应用于远程克隆操作。组复制会自动配置克隆 SSL 选项的设置 (clone_ssl_caclone_ssl_certclone_ssl_key) 以匹配您对相应组复制分布式恢复选项的设置 (group_replication_recovery_ssl_cagroup_replication_recovery_ssl_certgroup_replication_recovery_ssl_key)。

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

  • 克隆插件具有许多系统变量来管理远程克隆操作的网络负载和性能影响。组复制不会配置这些设置,因此您可以查看并设置这些设置(如果您愿意),或者让它们保持默认设置。请注意,当远程克隆操作用于分布式恢复时,克隆插件的 clone_enable_compression 设置适用于操作,而不是组复制压缩设置。

  • 为了在接收者上调用远程克隆操作,组复制使用内部 mysql.session 用户,该用户已经拥有 CLONE_ADMIN 权限,因此您无需进行设置。

  • 作为远程克隆操作的捐赠者上的克隆用户,组复制使用您为分布式恢复设置的复制用户(如 第 20.2.1.3 节,“用于分布式恢复的用户凭据” 中所述)。因此,您必须将 BACKUP_ADMIN 权限授予所有支持克隆的组成员上的此复制用户。在您为组复制配置加入成员时,也向加入成员上的复制用户授予此权限,因为它们在加入组后可以充当捐赠者。同一复制用户用于每个组成员上的分布式恢复。为了将此权限授予现有成员上的复制用户,您可以对每个组成员分别发出此语句,禁用二进制日志记录,或者在一个组成员上发出此语句,启用二进制日志记录

    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 通道可能会意外地使用存储的凭据启动,无论是在原始成员上还是从其克隆的成员上。 服务器启动时(包括远程克隆操作之后)自动启动组复制将使用存储的用户凭据,如果操作员没有在 START GROUP_REPLICATION 命令中指定分布式恢复凭据,它们也会被使用。

20.5.4.2.2 克隆阈值

当组成员已设置为支持克隆时,group_replication_clone_threshold 系统变量指定一个阈值,以事务数表示,用于在分布式恢复中使用远程克隆操作。 如果捐赠者上的事务与加入的成员上的事务之间的差距大于此数字,则在技术上可行时,会使用远程克隆操作将状态传输到加入的成员。 组复制根据现有组成员的 gtid_executed 集计算阈值是否已超过。 在存在较大事务差距的情况下使用远程克隆操作可以让你在不事先将组的数据手动传输到服务器的情况下将新成员添加到组中,还可以让严重落后的成员更有效地追赶上。

group_replication_clone_threshold 组复制系统变量的默认设置为非常高(GTID 中事务允许的最大序列号),因此它实际上禁用了可能从二进制日志进行状态传输的任何地方的克隆。 要使组复制能够在更合适的情况下选择远程克隆操作进行状态传输,请将系统变量设置为指定事务数,作为你希望克隆发生的超过该事务数的事务差距。

警告

不要在活动组中为 group_replication_clone_threshold 设置较低的值。 如果远程克隆操作正在进行时,组中发生了超过阈值的事务数,则加入的成员将在重新启动后再次触发远程克隆操作,并且可能无限期地继续执行此操作。 为避免这种情况,请确保将阈值设置为大于你预期在远程克隆操作执行期间在组中发生的事务数。

无论你的阈值如何,组复制都尝试执行远程克隆操作,例如,当从捐赠者二进制日志进行状态传输不可能时,因为加入的成员需要的交易在任何现有的组成员的二进制日志中都不可用。 组复制根据现有组成员的 gtid_purged 集识别这一点。 你不能使用 group_replication_clone_threshold 系统变量在所需事务在任何成员的二进制日志文件中都不可用时禁用克隆,因为在这种情况下,克隆是将数据手动传输到加入的成员的唯一替代方案。

20.5.4.2.3 克隆操作

当组成员和加入的成员已设置为支持克隆时,组复制会为你管理远程克隆操作。 远程克隆操作可能需要一些时间才能完成,具体取决于数据的大小。 请参阅 第 7.6.7.10 节,“监视克隆操作”,了解有关监视此过程的信息。

注意

状态传输完成后,组复制将重新启动加入的成员以完成此过程。 如果 group_replication_start_on_boot=OFF 设置在加入的成员上,例如,因为你在 START GROUP_REPLICATION 语句中指定了复制用户凭据,你必须在此重启之后再次手动发出 START GROUP_REPLICATION。 如果 group_replication_start_on_boot=ON 以及启动组复制所需的的其他设置已在配置文件中设置或使用 SET PERSIST 语句设置,则你无需干预,此过程将自动继续以使加入的成员联机。

远程克隆操作会将从捐赠者复制到接收者的表中持久保存的设置以及数据克隆。 组复制管理与组复制通道相关的设置。 在配置文件中持久保存的组复制成员设置(例如组复制本地地址)不会被克隆,也不会在加入的成员上更改。 组复制还会保留与使用 SSL 相关的通道设置,因此这些设置对于每个成员都是唯一的。

如果捐赠者用于 group_replication_recovery 复制通道的复制用户凭据已使用 CHANGE REPLICATION SOURCE TO 语句存储在复制元数据存储库中,它们会在克隆后被传输到加入的成员并被其使用,并且必须在该处有效。 因此,对于通过远程克隆操作接收状态传输的所有组成员来说,它们都会自动收到用于分布式恢复的复制用户和密码。 如果你在 START GROUP_REPLICATION 语句中指定复制用户凭据,这些凭据将用于启动远程克隆操作,但不会被传输到加入的成员并在克隆后被其使用。 如果你不希望将凭据传输到新的加入者并在那里记录,请确保在远程克隆操作执行之前取消设置它们,如 第 20.6.3 节,“保护分布式恢复连接” 中所述,并使用 START GROUP_REPLICATION 而不是提供它们。

如果 PRIVILEGE_CHECKS_USER 帐户已被用于帮助保护复制应用程序(请参阅 第 19.3.3.2 节,“组复制通道的权限检查”),则捐赠者的 PRIVILEGE_CHECKS_USER 帐户和相关设置将被克隆到加入的成员。 如果加入的成员已设置为在启动时启动组复制,它会自动使用该帐户对相应的复制通道进行权限检查。

20.5.4.2.4 用于其他目的的克隆

组复制会启动和管理用于分布式恢复的克隆操作。 已设置为支持克隆的组成员也可以参与用户手动启动的克隆操作。 例如,你可能希望通过从组成员(作为捐赠者)克隆创建一个新的服务器实例,但你不希望新服务器实例立即加入组,或者可能永远不会加入。

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

INSTALL PLUGIN group_replication SONAME 'group_replication.so';

如果你要手动启动克隆操作,则该操作涉及已运行组复制的组成员,前提是该克隆操作不会删除和替换接收者上的数据。 因此,如果组复制正在运行,则用于启动克隆操作的语句必须包含 DATA DIRECTORY 子句。