• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • NDB群集复制的一般要求

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

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

    重要

    如果尝试将NDB群集复制与一起使用--binlog-format=STATEMENT,则复制将无法正常工作,因为未更新ndb_binlog_index主数据库epoch上的ndb_apply_status表和从数据库上的表的列(请参见“ NDB群集复制架构和表”)。相反,仅充当复制主服务器的MySQL服务器上的更新会传播到从服务器,而不会复制主集群上任何其他SQL节点的更新。

    --binlog-formatNDB 8.0中该选项的默认值为MIXED

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

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

    我们假定从属服务器或群集专用于主服务器的复制,并且上面没有存储其他数据。

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

    注意

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

    • 群集中充当主服务器的数据行的所有更新都必须定向到单个MySQL服务器。
    • 无法使用多个同时的MySQL复制过程来复制集群。
    • 仅复制在SQL级别上所做的更改。

    这些是基于语句的复制与基于行的复制相反的其他限制。有关有关两种复制格式之间差异的更多详细信息,请参见“复制格式”。