组复制使用分布式恢复过程来同步组成员,方法是将它们加入到组中。分布式恢复涉及使用名为 group_replication_recovery
的复制通道将事务从捐赠者的二进制日志传输到加入的成员。因此,您必须设置具有正确权限的复制用户,以便组复制能够建立直接的成员间复制通道。如果组成员已设置为支持作为分布式恢复的一部分使用远程克隆操作,则此复制用户也用作捐赠者上的克隆用户,并且需要该角色的正确权限。有关分布式恢复的完整说明,请参见 第 20.5.4 节,“分布式恢复”.
每个组成员都必须使用相同的复制用户进行分布式恢复。创建用于分布式恢复的复制用户的过程可以记录在二进制日志中,然后您可以依靠分布式恢复来复制用于创建用户的语句。或者,您可以在创建复制用户之前禁用二进制日志记录,然后在每个成员上手动创建用户,例如,如果您想避免更改传播到其他服务器实例。如果您这样做,请确保在配置用户后重新启用二进制日志记录。
如果组的分布式恢复连接使用 SSL,则必须在加入的成员连接到捐赠者之前在每个服务器上创建复制用户。有关为分布式恢复连接设置 SSL 并创建需要 SSL 的复制用户的说明,请参见 第 20.6.3 节,“保护分布式恢复连接”
默认情况下,在 MySQL 8 中创建的用户使用 第 8.4.1.1 节,“缓存 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;
创建复制用户后,必须将用户凭据提供给服务器,以便与分布式恢复一起使用。您可以通过使用
CHANGE REPLICATION SOURCE TO
语句将用户凭据设置为group_replication_recovery
通道的凭据来执行此操作。或者,您可以在START GROUP_REPLICATION
语句中指定用于分布式恢复的用户凭据。使用
CHANGE REPLICATION SOURCE TO
设置的用户凭据以纯文本形式存储在服务器上的复制元数据存储库中。它们将在每次启动组复制时应用,包括如果group_replication_start_on_boot
系统变量设置为ON
时的自动启动。在
START GROUP_REPLICATION
中指定的用户凭据仅保存在内存中,并通过STOP GROUP_REPLICATION
语句或服务器关闭移除。您必须发出START 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';