Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  User Credentials For Distributed Recovery

20.2.1.3 分布式恢复用户凭证

组复制使用分布式恢复过程来同步组成员加入组时。分布式恢复涉及从捐赠者的二进制日志传输事务到加入成员使用名为 group_replication_recovery 的复制通道。因此,您必须设置具有正确权限的复制用户,以便组复制可以建立直接的成员到成员复制通道。如果组成员已经设置为支持远程克隆操作作为分布式恢复的一部分,则该复制用户也将用作捐赠者的克隆用户,并需要正确的权限来执行此角色。有关分布式恢复的完整描述,请参见 第 20.5.4 节,“分布式恢复”

每个组成员都需要使用相同的复制用户来进行分布式恢复。创建分布式恢复复制用户的过程可以捕获到二进制日志中,然后您可以依靠分布式恢复来复制创建用户的语句。或者,您可以在创建复制用户之前禁用二进制日志,然后手动在每个成员上创建用户,例如,如果您想避免更改被传播到其他服务器实例。在这样做时,请确保重新启用二进制日志一旦您已经配置了用户。

Important

如果分布式恢复连接使用 SSL,复制用户必须在加入成员连接到捐赠者之前在每个服务器上创建。如果您想设置 SSL 来保护分布式恢复连接并创建需要 SSL 的复制用户,请参见 第 20.6.3 节,“保护分布式恢复连接”

Important

默认情况下,MySQL 8 中创建的用户使用 第 8.4.1.2 节,“缓存 SHA-2 可插拔身份验证”。如果分布式恢复的复制用户使用缓存 SHA-2 身份验证插件,并且您 使用 SSL 来保护分布式恢复连接,那么 RSA 密钥对将用于密码交换。您可以将复制用户的公钥复制到加入成员上,或者配置捐赠者在请求时提供公钥。有关如何执行此操作的说明,请参见 第 20.6.3.1 节,“分布式恢复的安全用户凭证”

要创建分布式恢复的复制用户,请按照以下步骤操作:

  1. 启动 MySQL 服务器实例,然后连接到它。

  2. 如果您想禁用二进制日志以便在每个实例上单独创建复制用户,请执行以下语句:

    mysql> SET SQL_LOG_BIN=0;
  3. 创建一个具有以下权限的 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;
  4. 如果您禁用了二进制日志,请在创建用户后重新启用它,通过执行以下语句:

    mysql> SET SQL_LOG_BIN=1;
  5. 当您创建了复制用户后,必须将用户凭证提供给服务器,以便在分布式恢复中使用。您可以通过设置用户凭证为group_replication_recovery通道的凭证,使用CHANGE REPLICATION SOURCE TO语句。或者,您可以在START GROUP_REPLICATION语句中指定分布式恢复的用户凭证。

    有关每种方法提供用户凭证的安全隐患的更多信息,请参阅第 20.6.3.1.3 节,“安全地提供复制用户凭证”。如果您选择使用CHANGE REPLICATION SOURCE TO语句提供用户凭证,现在请在服务器实例上发出以下语句,替换rpl_userpassword为创建用户时使用的值:

    mysql> CHANGE REPLICATION SOURCE TO SOURCE_USER='rpl_user', 
        ->   SOURCE_PASSWORD='password'
        ->   FOR CHANNEL 'group_replication_recovery';