Documentation Home
MySQL 8.0 参考手册  / 第 23 章 MySQL NDB Cluster 8.0  / 23.7 NDB 集群复制  /  21.7.2 NDB Cluster 复制的一般要求

21.7.2 NDB Cluster 复制的一般要求

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

本节和以下部分中描述的 NDB Cluster 的复制依赖于基于行的复制。这意味着复制源 MySQL 服务器必须使用 --binlog-format=ROW或 运行--binlog-format=MIXED,如第 21.7.6 节,“启动 NDB Cluster 复制(单复制通道)”中所述。有关基于行的复制的一般信息,请参阅 第 16.2.1 节,“复制格式”

重要的

如果您尝试将 NDB Cluster Replication 与 一起使用 --binlog-format=STATEMENT,复制将无法正常工作,因为 ndb_binlog_index源 cluster上的表和副本 cluster 上epoch的表的列 ndb_apply_status未更新(请参阅 第 21.7.4 节,“NDB Cluster 复制模式和表” ). 相反,只有作为复制源的 MySQL 服务器上的更新才会传播到副本,而不会复制来自源集群中任何其他 SQL 节点的更新。

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

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

在 MySQL 复制中通常是这样的,涉及的两个 MySQL 服务器(mysqld进程)必须在使用的复制协议版本和它们支持的 SQL 功能集方面相互兼容(参见第 16.4.2 节,“复制MySQL 版本之间的兼容性”)。由于 NDB Cluster 和 MySQL Server 5.7 发行版中的二进制文件之间存在这种差异,NDB Cluster Replication 有额外的要求,即两个 mysqld二进制文件都来自 NDB Cluster 发行版。确保 mysqld的最简单和最容易的方法服务器兼容是为所有源和副本 mysqld二进制文件使用相同的 NDB Cluster 分布。

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

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

笔记

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

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

  • 不可能使用多个同步的 MySQL 复制进程来复制集群。

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

这些是基于语句的复制相对于基于行的复制的其他限制的补充;有关这两种复制格式之间差异的更多具体信息, 请参阅第 16.2.1.1 节,“基于语句和基于行的复制的优点和缺点” 。