从 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_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
|
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 TO
CHANGE MASTER TO
ON
sql_require_primary_key = ON
REQUIRE_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 通道的帐户。