21.6.6 启动 NDB 群集复制(单个复制通道)

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

  • 通过发出以下命令来启动 MySQL 复制源服务器:
shellS> mysqld --ndbcluster --server-id=id \
        --log-bin --ndb-log-bin &

在上一条语句中,* id *是此服务器的唯一 ID(请参阅第 21.6.2 节“ NDB 群集复制的一般要求”)。这将启动服务器的mysqld进程,并使用正确的日志记录格式启用二进制日志记录。

Note

您也可以使用--binlog-format=MIXED来启动源,在这种情况下,在集群之间复制时会自动使用基于行的复制。 NDB 群集复制不支持基于语句的二进制日志记录(请参阅第 21.6.2 节“ NDB 群集复制的一般要求”)。

  • 启动 MySQL 复制服务器,如下所示:
shellR> mysqld --ndbcluster --server-id=id &

在刚刚显示的命令中,* id *是副本服务器的唯一 ID。不必启用登录副本。

Note

您应在此命令中使用--skip-slave-start选项,否则应将skip-slave-start包括在副本服务器的my.cnf文件中,除非您希望立即开始复制。使用此选项,复制的开始将延迟到发出适当的START SLAVE语句之前,如下面的步骤 4 中所述。

  • 必须将副本服务器与源服务器的复制二进制日志同步。如果以前未在源上运行二进制日志记录,请在副本上运行以下语句:
mysqlR> CHANGE MASTER TO
     -> MASTER_LOG_FILE='',
     -> MASTER_LOG_POS=4;

这指示副本从日志的起点开始读取源服务器的二进制日志。否则(即,如果您正在使用备份从源加载数据),请参阅第 21.6.8 节“使用 NDB 群集复制实现故障转移”,以获取有关在这种情况下如何获取用于MASTER_LOG_FILEMASTER_LOG_POS的正确值的信息。

  • 最后,通过从副本上的mysqlClient 端发出以下命令,指示副本开始应用复制:
mysqlR> START SLAVE;

这也将启动数据传输并从源到副本进行更改。

也可以使用与下一节中介绍的过程类似的方式使用两个复制通道。 第 21.6.7 节“使用两个复制通道进行 NDB 群集复制”涵盖了与使用单个复制通道之间的区别。

通过启用批处理更新,还可以提高群集复制性能。这可以通过在副本的mysqld进程上设置slave_allow_batching系统变量来完成。通常,更新会在收到后立即应用。但是,使用批处理会导致每 32 KB 的批处理中应用更新。这会导致更高的吞吐量和更少的 CPU 使用率,尤其是在个别更新相对较小的情况下。

Note

批处理按每个时期进行;属于多个事务的更新可以作为同一批处理的一部分发送。

到一个纪元结束时,所有未完成的更新都会应用,即使更新的总大小少于 32 KB。

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

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

如果特定批次导致问题(例如,其效果似乎未正确复制的语句),则可以使用以下任一语句来取消激活批次:

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

您可以通过适当的SHOW VARIABLES语句来检查当前是否正在使用批处理,例如:

mysql> SHOW VARIABLES LIKE 'slave%';
+---------------------------+-------+
| Variable_name             | Value |
+---------------------------+-------+
| slave_allow_batching      | ON    |
| slave_compressed_protocol | OFF   |
| slave_load_tmpdir         | /tmp  |
| slave_net_timeout         | 3600  |
| slave_skip_errors         | OFF   |
| slave_transaction_retries | 10    |
+---------------------------+-------+
6 rows in set (0.00 sec)