#### 17.3.3.2 组复制通道的权限检查

从 MySQL 8.0.19 开始，以及保护异步和半同步复制，您可以选择使用`PRIVILEGE_CHECKS_USER`帐户以保护组复制使用的两个复制应用程序线程。这`group_replication_applier`每个组成员上的线程用于应用组的事务，并且`group_replication_recovery`当成员加入或重新加入组时，每个组成员上的线程用于从二进制日志进行状态传输，作为分布式恢复的一部分。

要保护这些线程之一，请停止组复制，然后发出[`将复制源更改为`](change-replication-source-to.html)语句（来自 MySQL 8.0.23）或[`将主更改为`](change-master-to.html)语句（在 MySQL 8.0.23 之前）与`PRIVILEGE_CHECKS_USER`选项，指定`group_replication_applier`要么`group_replication_recovery`作为频道名称。例如：

```
mysql> STOP GROUP_REPLICATION;
mysql> CHANGE MASTER TO PRIVILEGE_CHECKS_USER = 'gr_repl'@'%.example.com'
          FOR CHANNEL 'group_replication_recovery';
mysql> FLUSH PRIVILEGES;
mysql> START GROUP_REPLICATION;

Or from MySQL 8.0.23:
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`设置在创建通道时自动启用，不能禁用，因此您无需指定。

重要的

在 MySQL 8.0.19 中，确保您没有发出[`将复制源更改为`](change-replication-source-to.html)\|[`将主更改为`](change-master-to.html)与声明`PRIVILEGE_CHECKS_USER`组复制运行时的选项。此操作会导致清除通道的中继日志文件，这可能会导致丢失已接收并在中继日志中排队但尚未应用的事务。

组复制要求组要复制的每个表都具有定义的主键或等效的主键，其中等效项是非空唯一键。而不是使用由[`sql_require_primary_key`](server-system-variables.html#sysvar_sql_require_primary_key)系统变量，Group Replication 有自己的内置主键或主键等效检查集。您可以设置`REQUIRE_TABLE_PRIMARY_KEY_CHECK`的选项[`将复制源更改为`](change-replication-source-to.html)\|[`将主更改为`](change-master-to.html)声明`在`对于组复制通道。但是，请注意，您可能会发现某些在 Group Replication 的内置检查下允许的事务在您设置时执行的检查下是不允许的`sql_require_primary_key = ON`要么`REQUIRE_TABLE_PRIMARY_KEY_CHECK = ON`.出于这个原因，MySQL 8.0.20（引入该选项时）的新的和升级的组复制通道具有`REQUIRE_TABLE_PRIMARY_KEY_CHECK`设置为默认值`溪流`, 而不是`在`.

如果远程克隆操作用于组复制中的分布式恢复（请参阅[第 18.5.4.2 节，“用于分布式恢复的克隆”](group-replication-cloning.html))，从 MySQL 8.0.19 开始，`PRIVILEGE_CHECKS_USER`来自捐赠者的帐户和相关设置被克隆到加入成员。如果加入成员设置为在启动时启动组复制，它会自动使用该帐户在适当的复制通道上进行权限检查。

在 MySQL 8.0.18 中，由于一些限制，建议您不要使用`PRIVILEGE_CHECKS_USER`具有组复制通道的帐户。
