#### 18.2.1.3分布式恢复的用户凭据

[](<>)

组复制使用分布式恢复过程在将组成员加入组时同步组成员。分布式恢复涉及使用名为`组_复制_恢复`。因此，您必须设置具有正确权限的复制用户，以便组复制可以建立直接的成员到成员复制通道。如果已将组成员设置为支持将远程克隆操作作为分布式恢复的一部分使用（可从MySQL 8.0.17获得），则此复制用户也将用作供体上的克隆用户，并且需要此角色的正确权限。有关分布式恢复的完整描述，请参阅[第18.5.4节，“分布式恢复”](group-replication-distributed-recovery.html).

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

重要的

如果组的分布式恢复连接使用SSL，则必须在每台服务器上创建复制用户*之前*加入成员连接到捐赠者。有关为分布式恢复连接设置SSL并创建需要SSL的复制用户的说明，请参阅[第18.6.3节，“保护分布式恢复连接”](group-replication-distributed-recovery-securing.html)

重要的

默认情况下，在MySQL 8中创建的用户使用[第6.4.1.2节，“缓存SHA-2可插拔身份验证”](caching-sha2-pluggable-authentication.html)。如果用于分布式恢复的复制用户使用缓存SHA-2身份验证插件，并且*不*使用SSL进行分布式恢复连接，RSA密钥对用于密码交换。您可以将复制用户的公钥复制到加入成员，也可以将捐赠者配置为在请求时提供公钥。有关执行此操作的说明，请参阅[第18.6.3.1节，“分布式恢复的安全用户凭据”](group-replication-secure-user.html).

要创建用于分布式恢复的复制用户，请执行以下步骤：

1.  启动MySQL服务器实例，然后将客户端连接到它。

2.  如果要禁用二进制日志记录以便在每个实例上分别创建复制用户，请发出以下语句：

    ```
    mysql> SET SQL_LOG_BIN=0;
    ```

3.  使用[`复制从机`](privileges-provided.html#priv_replication-slave)用于分布式恢复的权限，如果服务器设置为支持克隆，则[`备份管理`](privileges-provided.html#priv_backup-admin)在克隆操作中作为捐赠者使用的特权。在本例中，用户*`rpl_用户`*用密码*`暗语`*如图所示。配置服务器时，请使用合适的用户名和密码：

    ```
    mysql> CREATE USER rpl_user@'%' IDENTIFIED BY 'password';
    mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
    mysql> GRANT BACKUP_ADMIN ON *.* TO rpl_user@'%';
    mysql> FLUSH PRIVILEGES;
    ```

4.  如果禁用了二进制日志记录，请在创建用户后立即再次启用，方法是发出以下语句：

    ```
    mysql> SET SQL_LOG_BIN=1;
    ```

5.  创建复制用户后，必须向服务器提供用于分布式恢复的用户凭据。可以通过将用户凭据设置为`组_复制_恢复`频道，使用[`将复制源更改为`](change-replication-source-to.html)语句（来自MySQL 8.0.23）或[`将主机更改为`](change-master-to.html)语句（MySQL 8.0.23之前）。或者，在MySQL 8.0.21中，您可以在服务器上指定分布式恢复的用户凭据[`启动组复制`](start-group-replication.html)陈述

    -   使用设置用户凭据[`将复制源更改为`](change-replication-source-to.html) \| [`将主机更改为`](change-master-to.html)以纯文本形式存储在服务器上的复制元数据存储库中。无论何时启动组复制，都会应用它们，包括在以下情况下自动启动：[`组_复制_启动_启动`](group-replication-options.html#sysvar_group_replication_start_on_boot)系统变量设置为`在…上`.

    -   在上指定的用户凭据[`启动组复制`](start-group-replication.html)仅保存在内存中，并由[`停止组复制`](stop-group-replication.html)语句或服务器关闭。你必须发布一个[`启动组复制`](start-group-replication.html)语句再次提供凭据，因此无法使用这些凭据自动启动组复制。这种指定用户凭据的方法有助于保护组复制服务器免受未经授权的访问。

        有关提供用户凭据的每种方法的安全影响的更多信息，请参阅[第18.6.3.1.3节，“安全地提供复制用户凭据”](group-replication-secure-user.html#group-replication-secure-user-provide)。如果您选择使用[`将复制源更改为`](change-replication-source-to.html) \| [`将主机更改为`](change-master-to.html)语句，立即在服务器实例上发出以下语句，替换*`rpl_用户`*和*`暗语`*使用创建用户时使用的值：

    ```
    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';
    ```
