您也可以使用 PRIVILEGE_CHECKS_USER
帐户来保护组复制使用的两个复制应用程序线程。每个组成员上的 group_replication_applier
线程用于应用组事务,而每个组成员上的 group_replication_recovery
线程用于在成员加入或重新加入组时,作为分布式恢复的一部分从二进制日志中进行状态传输。
要保护这些线程之一,请停止组复制,然后使用 PRIVILEGE_CHECKS_USER
选项发出 CHANGE REPLICATION SOURCE TO
语句,并指定 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
帐户和相关设置克隆到加入的成员。如果加入的成员设置为在启动时启动组复制,则它会自动使用该帐户来对相应的复制通道进行权限检查。