### 23.7.5 准备 NDB Cluster 以进行复制

[](<>)[](<>)

准备 NDB Cluster 进行复制包括以下步骤：

1.  检查所有 MySQL 服务器的版本兼容性（请参阅[第 23.7.2 节，“NDB 集群复制的一般要求”](mysql-cluster-replication-general.html)）。

2.  使用以下两个 SQL 语句在源集群上创建具有适当权限的复制帐户：

    ```
    mysqlS> CREATE USER 'replica_user'@'replica_host'
         -> IDENTIFIED BY 'replica_password';

    mysqlS> GRANT REPLICATION SLAVE ON *.*
         -> TO 'replica_user'@'replica_host';
    ```

    在之前的声明中，*`副本用户`*是复制帐户用户名，*`副本主机`*是副本的主机名或 IP 地址，并且*`副本密码`*是分配给此帐户的密码。

    例如，要创建一个副本用户帐户，其名称为`复制品`，从名为的主机登录`副本主机`, 并使用密码`53cr37`, 使用以下[`创建用户`](create-user.html)和[`授予`](grant.html)声明：

    ```
    mysqlS> CREATE USER 'myreplica'@'replica-host'
         -> IDENTIFIED BY '53cr37';

    mysqlS> GRANT REPLICATION SLAVE ON *.*
         -> TO 'myreplica'@'replica-host';
    ```

    出于安全原因，最好为复制帐户使用唯一的用户帐户（不用于任何其他目的）。

3.  [](<>) [](<>)设置副本以使用源。使用[**mysql**](mysql.html)客户端，这可以通过[`将复制源更改为`](change-replication-source-to.html)语句（从 MySQL 8.0.23 开始）或[`将主更改为`](change-master-to.html)声明（在 MySQL 8.0.23 之前）：

    ```
    mysqlR> CHANGE MASTER TO
         -> MASTER_HOST='source_host',
         -> MASTER_PORT=source_port,
         -> MASTER_USER='replica_user',
         -> MASTER_PASSWORD='replica_password';
    ```

    从 MySQL 8.0.23 开始，还可以使用以下语句：

    ```
    mysqlR> CHANGE REPLICATION SOURCE TO
         -> SOURCE_HOST='source_host',
         -> SOURCE_PORT=source_port,
         -> SOURCE_USER='replica_user',
         -> SOURCE_PASSWORD='replica_password';
    ```

    在之前的声明中，*`源主机`*是复制源的主机名或 IP 地址，*`源端口`*是副本连接到源时使用的端口，*`副本用户`*是为源上的副本设置的用户名，并且*`副本密码`*是在上一步中为该用户帐户设置的密码。

    例如，告诉副本使用主机名为的 MySQL 服务器`代表来源`使用在上一步中创建的复制帐户，使用以下语句：

    ```
    mysqlR> CHANGE MASTER TO
         -> MASTER_HOST='rep-source',
         -> MASTER_PORT=3306,
         -> MASTER_USER='myreplica',
         -> MASTER_PASSWORD='53cr37';
    ```

    从 MySQL 8.0.23 开始，还可以使用以下语句：

    ```
    mysqlR> CHANGE REPLICATION SOURCE TO
         -> SOURCE_HOST='rep-source',
         -> SOURCE_PORT=3306,
         -> SOURCE_USER='myreplica',
         -> SOURCE_PASSWORD='53cr37';
    ```

    有关可与此语句一起使用的选项的完整列表，请参阅[第 13.4.2.1 节，“将 MASTER 更改为语句”](change-master-to.html).

    要提供复制备份功能，您还需要添加一个[`--ndb-连接字符串`](mysql-cluster-options-variables.html#option_mysqld_ndb-connectstring)副本的选项`我的.cnf`开始复制过程之前的文件。看[第 23.7.9 节，“使用 NDB 集群复制的 NDB 集群备份”](mysql-cluster-replication-backups.html), 了解详情。

    对于可以设置的其他选项`我的.cnf`对于副本，请参阅[第 17.1.6 节，“复制和二进制日志记录选项和变量”](replication-options.html).

4.  如果源集群已在使用中，您可以创建源的备份并将其加载到副本上，以减少副本与源同步所需的时间。如果副本也在运行 NDB Cluster，这可以使用中描述的备份和恢复过程来完成[第 23.7.9 节，“使用 NDB 集群复制的 NDB 集群备份”](mysql-cluster-replication-backups.html).

    ```
    ndb-connectstring=management_host[:port]
    ```

    如果你是*不是*在副本上使用 NDB Cluster，您可以在源上使用以下命令创建备份：

    ```
    shellS> mysqldump --master-data=1
    ```

    然后通过将转储文件复制到副本将生成的数据转储导入副本。在此之后，您可以使用[**mysql**](mysql.html)客户端将数据从转储文件导入副本数据库，如下所示，其中*`转储文件`*是使用生成的文件的名称[**mysql转储**](mysqldump.html)在源头上，和*`数据库名称`*是要复制的数据库的名称：

    ```
    shellR> mysql -u root -p db_name < dump_file
    ```

    有关使用的选项的完整列表[**mysql转储**](mysqldump.html)， 看[第 4.5.4 节，“mysqldump - 数据库备份程序”](mysqldump.html).

    笔记

    如果以这种方式将数据复制到副本，请确保在加载所有数据之前阻止副本尝试连接到源以开始复制。您可以通过使用[`--skip-slave-启动`](replication-options-replica.html#option_mysqld_skip-slave-start)命令行上的选项，包括`跳过从启动`在复制品的`我的.cnf`文件，或从 MySQL 8.0.24 开始，通过设置[`skip_slave_start`](replication-options-replica.html#sysvar_skip_slave_start)系统变量。从 MySQL 8.0.26 开始，使用[`--skip-replica-start`](replication-options-replica.html#option_mysqld_skip-replica-start)要么[`skip_replica_start`](replication-options-replica.html#sysvar_skip_replica_start)反而。数据加载完成后，请按照接下来两节中概述的其他步骤进行操作。

5.  确保为每个充当复制源的 MySQL 服务器分配一个唯一的服务器 ID，并使用基于行的格式启用二进制日志记录。（看[第 17.2.1 节，“复制格式”](replication-formats.html).) 此外，我们建议启用系统变量[`副本允许批处理`](mysql-cluster-options-variables.html#sysvar_replica_allow_batching)（来自 MySQL 8.0.26）或[`slave_allow_batching`](mysql-cluster-options-variables.html#sysvar_slave_allow_batching)（在 MySQL 8.0.26 之前），并且可能会增加与[`--ndb-批量大小`](mysql-cluster-options-variables.html#option_mysqld_ndb-batch-size)和[`--ndb-blob-write-batch-bytes`](mysql-cluster-options-variables.html#option_mysqld_ndb-blob-write-batch-bytes)选项也是如此。所有这些选项都可以在源服务器的`我的.cnf`文件，或在启动源时在命令行上[**mysqld**](mysqld.html)过程。看[第 23.7.6 节，“启动 NDB 集群复制（单复制通道）”](mysql-cluster-replication-starting.html)， 了解更多信息。
