从 MySQL 8.0.19 开始,您可以选择使用 PRIVILEGE_CHECKS_USER
帐户来保护组复制中的两个复制应用程序线程。每个组成员上的 group_replication_applier
线程用于应用组事务,而 group_replication_recovery
线程用于从二进制日志中传输状态作为分布式恢复的一部分,当成员加入或重新加入组时。
要保护其中一个线程,请停止组复制,然后发出 CHANGE REPLICATION SOURCE TO
语句,带有 PRIVILEGE_CHECKS_USER
选项,指定 group_replication_applier
或 group_replication_recovery
作为通道名称。例如:
mysql> STOP GROUP_REPLICATION;
mysql> CHANGE REPLICATION SOURCE TO PRIVILEGE_CHECKS_USER = 'gr_repl'@'%.example.com'
FOR CHANNEL 'group_replication_recovery';
mysql> FLUSH PRIVILEGES;
mysql> START GROUP_REPLICATION;
对于组复制通道,REQUIRE_ROW_FORMAT
设置将在创建通道时自动启用,无法禁用,因此您不需要指定此设置。
组复制需要每个要被组复制的表都有一个定义的主键,或者主键等效键,其中等效键是一个非空唯一键。与 sql_require_primary_key
系统变量执行的检查不同,组复制具有其自己的内置主键或主键等效键检查集。您可以将 CHANGE REPLICATION SOURCE TO
语句的 REQUIRE_TABLE_PRIMARY_KEY_CHECK
选项设置为 ON
,以便为组复制通道启用主键检查。但是,请注意,在组复制的内置检查下允许的一些事务可能不允许在设置 sql_require_primary_key = ON
或 REQUIRE_TABLE_PRIMARY_KEY_CHECK = ON
时。因此,新的和升级的组复制通道将 REQUIRE_TABLE_PRIMARY_KEY_CHECK
设置为默认值 STREAM
,而不是 ON
。
如果在组复制中使用远程克隆操作进行分布式恢复(请参阅 第 20.5.4.2 节,“分布式恢复中的克隆”),则 PRIVILEGE_CHECKS_USER
帐户和相关设置将从捐赠者克隆到加入的成员。如果加入的成员设置为在启动时启动组复制,则它将自动使用该帐户对适当的复制通道进行权限检查。