### 23.7.6 启动 NDB 集群复制（单复制通道）

[](<>)

本节概述了使用单个复制通道启动 NDB Cluster 复制的过程。

1.  通过发出此命令启动 MySQL 复制源服务器，其中*`id`*是此服务器的唯一 ID（请参阅[第 23.7.2 节，“NDB 集群复制的一般要求”](mysql-cluster-replication-general.html)):

    ```
    shellS> mysqld --ndbcluster --server-id=id \
            --log-bin --ndb-log-bin &
    ```

    这将启动服务器的[**mysqld**](mysqld.html)使用正确的日志记录格式启用二进制日志记录的进程。在 NDB 8.0 中还需要启用更新日志记录到`新开发银行`表显式，使用[`--ndb-log-bin`](mysql-cluster-options-variables.html#sysvar_ndb_log_bin)选项;这是与以前版本的 NDB Cluster 的更改，其中默认启用此选项。

    笔记

    您也可以使用[`--binlog-format=混合`](replication-options-binary-log.html#sysvar_binlog_format)，在这种情况下，在集群之间进行复制时会自动使用基于行的复制。NDB Cluster Replication 不支持基于语句的二进制日志记录（请参阅[第 23.7.2 节，“NDB 集群复制的一般要求”](mysql-cluster-replication-general.html)）。

2.  启动 MySQL 副本服务器，如下所示：

    ```
    shellR> mysqld --ndbcluster --server-id=id &
    ```

    在刚刚显示的命令中，*`id`*是副本服务器的唯一 ID。不必在副本上启用日志记录。

    笔记

    除非您希望立即开始复制，否则请延迟复制线程的启动，直到合适的[`开始复制`](start-replica.html)已发布声明，如下文第 4 步所述。您可以通过使用[`--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).

3.  需要将副本服务器与源服务器的复制二进制日志同步。如果之前未在源上运行二进制日志记录，请在副本上运行以下语句：

    ```
    mysqlR> CHANGE MASTER TO
         -> MASTER_LOG_FILE='',
         -> MASTER_LOG_POS=4;
    ```

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

    ```
    mysqlR> CHANGE REPLICATION SOURCE TO
         -> SOURCE_LOG_FILE='',
         -> SOURCE_LOG_POS=4;
    ```

    这指示副本从日志的起点开始读取源服务器的二进制日志。否则——也就是说，如果您使用备份从源加载数据——请参阅[第 23.7.8 节，“使用 NDB Cluster Replication 实现故障转移”](mysql-cluster-replication-failover.html), 有关如何获取正确值以用于`SOURCE_LOG_FILE`\|`MASTER_LOG_FILE`和`SOURCE_LOG_POS`\|`MASTER_LOG_POS`在这种情况下。

4.  最后，通过从[**mysql**](mysql.html)副本上的客户端：

    ```
    mysqlR> START SLAVE;
    ```

    在 MySQL 8.0.22 及更高版本中，还可以使用以下语句：

    ```
    mysqlR> START REPLICA;
    ```

    这也启动了从源到副本的数据和更改的传输。

    也可以使用两个复制通道，方式类似于下一节中描述的过程；这和使用单个复制通道之间的区别在[第 23.7.7 节，“使用两个复制通道进行 NDB 集群复制”](mysql-cluster-replication-two-channels.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 之前）在副本上[**mysqld**](mysqld.html)过程。通常，一旦收到更新就会应用更新。但是，使用批处理会导致更新以每批 32 KB 的形式应用；这会导致更高的吞吐量和更少的 CPU 使用率，尤其是在单个更新相对较小的情况下。

笔记

批处理以每个时期为基础；属于多个事务的更新可以作为同一批次的一部分发送。

当一个 epoch 结束时，所有未完成的更新都会被应用，即使更新总量小于 32 KB。

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

批处理可以在运行时打开和关闭。要在运行时激活它，您可以使用以下两个语句之一：

```
SET GLOBAL slave_allow_batching = 1;
SET GLOBAL slave_allow_batching = ON;

Or from MySQL 8.0.26:
SET GLOBAL replica_allow_batching = 1;
SET GLOBAL replica_allow_batching = ON;
```

如果特定批次导致问题（例如，其效果似乎没有正确复制的语句），可以使用以下任何语句停用批处理：

```
SET GLOBAL slave_allow_batching = 0;
SET GLOBAL slave_allow_batching = OFF;

Or from MySQL 8.0.26:
SET GLOBAL replica_allow_batching = 0;
SET GLOBAL replica_allow_batching = OFF;
```

您可以通过适当的方式检查当前是否正在使用批处理[`显示变量`](show-variables.html)声明，就像这样：

```
mysql> SHOW VARIABLES LIKE 'slave%';

Or from MySQL 8.0.26:
mysql> SHOW VARIABLES LIKE 'replica%';
```
