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_FILE
和MASTER_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)