MySQL 8.0 参考手册  / 第十八章 组复制  / 18.2 开始  / 18.2.1 在单主模式下部署组复制  /  18.2.1.3 分布式恢复的用户凭证

18.2.1.3 分布式恢复的用户凭证

组复制使用分布式恢复过程在组成员加入组时同步组成员。分布式恢复涉及使用名为的复制通道将事务从捐赠者的二进制日志传输到加入成员group_replication_recovery. 因此,您必须设置具有正确权限的复制用户,以便 Group Replication 可以建立直接的成员到成员复制通道。如果已将组成员设置为支持使用远程克隆操作作为分布式恢复的一部分(从 MySQL 8.0.17 开始可用),则此复制用户也用作供体上的克隆用户,并且需要正确的权限也为了这个角色。有关分布式恢复的完整描述,请参阅 第 18.5.4 节,“分布式恢复”

相同的复制用户必须用于每个组成员的分布式恢复。分布式恢复创建复制用户的过程可以在二进制日志中捕获,然后可以依赖分布式恢复来复制创建用户的语句。或者,您可以在创建复制用户之前禁用二进制日志记录,然后在每个成员上手动创建用户,例如,如果您希望避免将更改传播到其他服务器实例。如果这样做,请确保在配置用户后重新启用二进制日志记录。

重要的

如果您的组的分布式恢复连接使用 SSL,则必须在 加入成员连接到捐赠者之前在每台服务器上创建复制用户。有关为分布式恢复连接设置 SSL 和创建需要 SSL 的复制用户的说明,请参阅 第 18.6.3 节,“保护分布式恢复连接”

重要的

默认情况下,在 MySQL 8 中创建的用户使用 第 6.4.1.2 节,“缓存 SHA-2 可插入身份验证”。如果分布式恢复的复制用户使用缓存 SHA-2 身份验证插件,并且您 没有使用 SSL 进行分布式恢复连接,则 RSA 密钥对用于密码交换。您可以将复制用户的公钥复制到加入成员,或者将捐赠者配置为在请求时提供公钥。有关执行此操作的说明,请参阅 第 18.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语句(来自 MySQL 8.0.23)或 语句(MySQL 8.0.23 之前)将用户凭据设置为通道的凭据来执行此操作 CHANGE MASTER TOSTART GROUP_REPLICATION 或者,从 MySQL 8.0.21 开始,您可以在语句 上指定用于分布式恢复的用户凭证。

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

    mysql> CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='password' \\
    		      FOR CHANNEL 'group_replication_recovery';
    
    Or from MySQL 8.0.23:
    mysql> CHANGE REPLICATION SOURCE TO SOURCE_USER='rpl_user', SOURCE_PASSWORD='password' \\
    		      FOR CHANNEL 'group_replication_recovery';