21.6.2 NDB 群集复制的一般要求

一个复制通道需要两个充当复制服务器的 MySQL 服务器(每个分别用于源服务器和副本服务器)。例如,这意味着在具有两个复制通道的复制设置(以提供额外的冗余通道)的情况下,总共将有四个复制节点,每个群集两个。

如本节及以下部分所述,NDB 群集的复制取决于基于行的复制。这意味着复制源 MySQL 服务器必须以--binlog-format=ROW--binlog-format=MIXED运行,如第 21.6.6 节“启动 NDB 群集复制(单个复制通道)”中所述。有关基于行的复制的一般信息,请参见第 16.2.1 节“复制格式”

Important

如果您尝试对--binlog-format=STATEMENT使用 NDB 群集复制,则复制将无法正常工作,因为源群集上的ndb_binlog_indextable 和副本群集上的ndb_apply_statustable 的epoch列未更新(请参阅第 21.6.4 节“ NDB 群集复制架构和 table”)。取而代之的是,只有充当复制源的 MySQL 服务器上的更新会传播到副本,并且不会复制源群集中任何其他 SQL 节点的更新。

--binlog-format选项的默认值为MIXED

必须在参与任一集群的所有 MySQL 复制服务器中唯一地标识用于任一集群中的每个 MySQL 服务器的复制(源集群和副本集群上的复制服务器不能共享相同的 ID)。这可以通过使用--server-id=id选项启动每个 SQL 节点来完成,其中* id *是唯一的整数。尽管不是严格必要的,但出于讨论目的,我们将假定所有 NDB Cluster 二进制文件都具有相同的发行版本。

通常,在 MySQL 复制中,涉及的两个 MySQL 服务器(mysqld进程)在使用的复制协议的版本和它们所支持的 SQL 功能集方面都必须彼此兼容(请参阅第 16.4.2 节“ MySQL 版本之间的复制兼容性”)。由于 NDB 群集和 MySQL Server 5.7 发行版中的二进制文件之间存在此类差异,因此 NDB 群集复制还具有两个mysqld二进制文件均来自 NDB 群集发行版的附加要求。确保mysqld服务器兼容的最简单,最简单的方法是对所有源和副本mysqld二进制文件使用相同的 NDB 群集分发。

我们假定副本服务器或群集专用于源群集的复制,并且没有其他数据存储在其上。

必须使用 MySQL 服务器和 Client 端创建所有要复制的NDBtable。使用 NDB API(例如Dictionary::createTable())创建的 table 和其他数据库对象对 MySQL 服务器不可见,因此不会被复制。可以复制 NDB API 应用程序对使用 MySQL 服务器创建的现有 table 的更新。

Note

可以使用基于语句的复制来复制 NDB 群集。但是,在这种情况下,适用以下限制:

  • 群集上作为源的数据行的所有更新都必须定向到单个 MySQL 服务器。

  • 无法使用多个同时的 MySQL 复制过程来复制集群。

  • 仅复制在 SQL 级别上所做的更改。

这些是基于语句的复制与基于行的复制相反的其他限制。有关两种复制格式之间差异的更多特定信息,请参见第 16.2.1.1 节,“基于语句的复制和基于行的复制的优缺点”