MySQL 8.0 参考手册  / 第十七章复制  / 17.3 复制安全  / 17.3.3 复制权限检查  /  17.3.3.2 组复制通道的权限检查

17.3.3.2 组复制通道的权限检查

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

为了保护这些线程之一,停止组复制,然后发出CHANGE REPLICATION SOURCE TO语句(从 MySQL 8.0.23 开始)或 CHANGE MASTER TO带有 PRIVILEGE_CHECKS_USER选项的语句(MySQL 8.0.23 之前),指定 group_replication_appliergroup_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;

对于 Group Replication 通道,该 REQUIRE_ROW_FORMAT设置在通道创建时自动启用,无法禁用,因此您无需指定。

重要的

在 MySQL 8.0.19 中,确保您没有发出 CHANGE REPLICATION SOURCE TO| Group Replication 运行时CHANGE MASTER TO带有选项的语句。PRIVILEGE_CHECKS_USER此操作会导致清除通道的中继日志文件,这可能会导致丢失已接收并在中继日志中排队但尚未应用的事务。

Group Replication 要求要由组复制的每个表都具有定义的主键,或主键等效项,其中等效项是非空唯一键。Group Replication没有使用系统变量执行的检查,而是 sql_require_primary_key有自己的内置主键或主键等效检查集。您可以设置 | 的REQUIRE_TABLE_PRIMARY_KEY_CHECK选项 组复制通道的语句 。但是,请注意,您可能会发现某些在 Group Replication 的内置检查下允许的事务在您设置 或 执行的检查下不允许CHANGE REPLICATION SOURCE TOCHANGE MASTER TOONsql_require_primary_key = ONREQUIRE_TABLE_PRIMARY_KEY_CHECK = ON. 出于这个原因,MySQL 8.0.20 中新的和升级的组复制通道(引入该选项时)已 REQUIRE_TABLE_PRIMARY_KEY_CHECK设置为默认值STREAM,而不是 ON

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

在 MySQL 8.0.18 中,由于诸多限制,建议您不要使用 PRIVILEGE_CHECKS_USER具有 Group Replication 通道的帐户。