组复制使用分布式恢复过程来同步组成员加入组时。分布式恢复涉及从捐赠者的二进制日志传输事务到加入成员使用名为 group_replication_recovery
的复制通道。因此,您必须设置具有正确权限的复制用户,以便组复制可以建立直接的成员到成员复制通道。如果组成员已经设置为支持远程克隆操作作为分布式恢复的一部分,则该复制用户也将用作捐赠者的克隆用户,并需要正确的权限来执行此角色。有关分布式恢复的完整描述,请参见 第 20.5.4 节,“分布式恢复”。
每个组成员都需要使用相同的复制用户来进行分布式恢复。创建分布式恢复复制用户的过程可以捕获到二进制日志中,然后您可以依靠分布式恢复来复制创建用户的语句。或者,您可以在创建复制用户之前禁用二进制日志,然后手动在每个成员上创建用户,例如,如果您想避免更改被传播到其他服务器实例。在这样做时,请确保重新启用二进制日志一旦您已经配置了用户。
如果分布式恢复连接使用 SSL,复制用户必须在加入成员连接到捐赠者之前在每个服务器上创建。如果您想设置 SSL 来保护分布式恢复连接并创建需要 SSL 的复制用户,请参见 第 20.6.3 节,“保护分布式恢复连接”
默认情况下,MySQL 8 中创建的用户使用 第 8.4.1.2 节,“缓存 SHA-2 可插拔身份验证”。如果分布式恢复的复制用户使用缓存 SHA-2 身份验证插件,并且您 不 使用 SSL 来保护分布式恢复连接,那么 RSA 密钥对将用于密码交换。您可以将复制用户的公钥复制到加入成员上,或者配置捐赠者在请求时提供公钥。有关如何执行此操作的说明,请参见 第 20.6.3.1 节,“分布式恢复的安全用户凭证”。
要创建分布式恢复的复制用户,请按照以下步骤操作:
-
启动 MySQL 服务器实例,然后连接到它。
-
如果您想禁用二进制日志以便在每个实例上单独创建复制用户,请执行以下语句:
mysql> SET SQL_LOG_BIN=0;
-
创建一个具有以下权限的 MySQL 用户:
-
REPLICATION SLAVE
,该权限是连接到捐赠者以检索数据所需的。 -
CONNECTION_ADMIN
,该权限确保组复制连接不会在服务器离线模式下终止。 -
BACKUP_ADMIN
,如果服务器组设置了支持克隆(请参见 第 20.5.4.2 节,“分布式恢复的克隆”)。该权限是成员作为捐赠者在分布式恢复克隆操作中所需的。 -
GROUP_REPLICATION_STREAM
,如果 MySQL 通信栈用于复制组(请参见 第 20.6.1 节,“通信栈的连接安全管理”)。该权限是用户帐户能够使用 MySQL 通信栈建立和维护组复制连接所需的。
在这个示例中,用户
rpl_user
带密码password
被展示。当配置服务器时,请使用合适的用户名和密码:mysql> CREATE USER rpl_user@'%' IDENTIFIED BY 'password'; mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%'; mysql> GRANT CONNECTION_ADMIN ON *.* TO rpl_user@'%'; mysql> GRANT BACKUP_ADMIN ON *.* TO rpl_user@'%'; mysql> GRANT GROUP_REPLICATION_STREAM ON *.* TO rpl_user@'%'; mysql> FLUSH PRIVILEGES;
-
-
如果您禁用了二进制日志,请在创建用户后重新启用它,通过执行以下语句:
mysql> SET SQL_LOG_BIN=1;
-
当您创建了复制用户后,必须将用户凭证提供给服务器,以便在分布式恢复中使用。您可以通过设置用户凭证为
group_replication_recovery
通道的凭证,使用CHANGE REPLICATION SOURCE TO
语句。或者,您可以在START GROUP_REPLICATION
语句中指定分布式恢复的用户凭证。-
使用
CHANGE REPLICATION SOURCE TO
设置的用户凭证将以明文形式存储在服务器的复制元数据存储库中。它们将在启动Group Replication时应用,包括自动启动,如果group_replication_start_on_boot
系统变量设置为ON
。 -
在
START GROUP_REPLICATION
中指定的用户凭证将仅保存在内存中,并将被STOP GROUP_REPLICATION
语句或服务器关闭删除。您必须发出START GROUP_REPLICATION
语句以提供凭证,因此您无法使用这些凭证自动启动Group Replication。这种方法可以帮助保护Group Replication服务器免受未经授权的访问。
有关每种方法提供用户凭证的安全隐患的更多信息,请参阅第 20.6.3.1.3 节,“安全地提供复制用户凭证”。如果您选择使用
CHANGE REPLICATION SOURCE TO
语句提供用户凭证,现在请在服务器实例上发出以下语句,替换rpl_user
和password
为创建用户时使用的值:mysql> CHANGE REPLICATION SOURCE TO SOURCE_USER='rpl_user', -> SOURCE_PASSWORD='password' -> FOR CHANNEL 'group_replication_recovery';
-