您还可以使用 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
帐户和来自供体的相关设置将被克隆到加入的成员。如果加入的成员设置为在启动时启动组复制,它会自动使用该帐户对相应的复制通道进行权限检查。