从 MySQL 8.0.19 开始,除了保护异步和半同步复制,您还可以选择使用 PRIVILEGE_CHECKS_USER帐户来保护 Group Replication 使用的两个复制应用程序线程。每个组成员上的 group_replication_applier线程用于应用组的事务,group_replication_recovery每个组成员上的线程用于在成员加入或重新加入组时作为分布式恢复的一部分从二进制日志传输状态。
要保护这些线程之一,请停止 Group Replication,然后发出带有选项的CHANGE REPLICATION SOURCE TO语句(从 MySQL 8.0.23)或 CHANGE MASTER TO语句(在 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;
对于 Group Replication 通道,该 REQUIRE_ROW_FORMAT设置会在创建通道时自动启用,并且无法禁用,因此您无需指定。
重要的
在 MySQL 8.0.19 中,确保不发出 CHANGE REPLICATION SOURCE TO| 组复制运行时CHANGE MASTER TO带有选项的语句。PRIVILEGE_CHECKS_USER此操作会导致通道的中继日志文件被清除,这可能会导致已接收并在中继日志中排队但尚未应用的事务丢失。
组复制要求组要复制的每个表都具有定义的主键,或等效的主键,其中等效项是非空唯一键。组复制没有使用系统变量执行的检查,而是 sql_require_primary_key拥有自己的内置主键或主键等效检查集。您可以 REQUIRE_TABLE_PRIMARY_KEY_CHECK设置 CHANGE REPLICATION SOURCE TO| 用于组复制通道的CHANGE MASTER TO语句 。ON但是,请注意,您可能会发现某些在 Group Replication 的内置检查下允许的事务在您设置 sql_require_primary_key = ON或 执行的检查下是不允许的REQUIRE_TABLE_PRIMARY_KEY_CHECK = ON. 出于这个原因,MySQL 8.0.20(引入该选项时)的新的和升级的 Group Replication 通道已 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 通道的帐户。




