19.3.3.2 组复制通道的权限检查
您也可以使用 PRIVILEGE_CHECKS_USER
账户来保护 Group Replication 中的两个复制线程。每个组成员上的 group_replication_applier
线程用于应用组事务,而每个组成员上的 group_replication_recovery
线程用于从二进制日志中进行状态转移,以便在成员加入或重新加入组时进行分布式恢复。
要保护这些线程,请停止 Group Replication,然后使用 CHANGE REPLICATION SOURCE TO
语句,使用 PRIVILEGE_CHECKS_USER
选项,指定 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;
对于 Group Replication 通道,REQUIRE_ROW_FORMAT
设置将自动启用,当通道创建时不能被禁用,因此您不需要指定这个设置。
Group Replication 需要每个要被组复制的表都有定义的主键或主键等效项,而不是使用 sql_require_primary_key
系统变量执行的检查,Group Replication 有自己的检查机制。您可以将 REQUIRE_TABLE_PRIMARY_KEY_CHECK
选项设置为 ON
,在 CHANGE REPLICATION SOURCE TO
语句中。但是,请注意在 Group Replication 的检查机制下允许的交易可能在设置 sql_require_primary_key = ON
或 REQUIRE_TABLE_PRIMARY_KEY_CHECK = ON
时不允许。因此,新的和升级的 Group Replication 通道将 REQUIRE_TABLE_PRIMARY_KEY_CHECK
设置为默认值 STREAM
,而不是 ON
。
如果在 Group Replication 中使用远程克隆操作进行分布式恢复(见Section 20.5.4.2, “Cloning for Distributed Recovery”),则 PRIVILEGE_CHECKS_USER
账户和相关设置将从捐助者克隆到加入的成员。如果加入的成员设置为在启动时启动 Group Replication,它将自动使用账户来进行权限检查,以适应适当的复制通道。