### 23.3.7 升级和降级 NDB 集群

[](<>)[](<>)[](<>)[](<>)

本节提供有关 NDB Cluster 软件和不同 NDB Cluster 8.0 版本之间关于执行升级和降级以及兼容性矩阵和注释的表文件兼容性的信息。在尝试升级或降级之前，您应该已经熟悉安装和配置 NDB Cluster。看[第 23.4 节，“NDB 集群的配置”](mysql-cluster-configuration.html).

模式操作，包括 SQL DDL 语句，不能在任何数据节点重新启动时执行，因此在集群的在线升级或降级期间。有关用于执行在线升级的滚动重启过程的其他信息，请参阅[第 23.6.5 节，“执行 NDB 集群的滚动重启”](mysql-cluster-rolling-restart.html).

重要的

只有 MySQL 版本之间的兼容性[`NDBCLUSTER`](mysql-cluster.html)本节考虑了，可能还有其他问题需要考虑。*与任何其他 MySQL 软件升级或降级一样，强烈建议您在尝试升级或降级 NDB Cluster 软件之前查看 MySQL 手册的相关部分，了解您打算从中迁移和迁移到的 MySQL 版本*.看[第 2.11 节，“升级 MySQL”](upgrading.html).

此处显示的表提供了有关 NDB 8.0 不同版本之间 NDB Cluster 升级和降级兼容性的信息。有关 NDB Cluster 8.0 版本系列的升级和降级的其他说明，请参见下表。

#### 升级和降级，NDB Cluster 8.0

[](<>)

**图 23.5 NDB 集群升级和降级兼容性，MySQL NDB 集群 8.0**

<img alt="Graphical representation of the upgrade/downgrade matrix contained in the file storage/ndb/src/common/util/version.cpp from the MySQL 8.0 source tree." src="images/mysql-cluster-upgrade-downgrade-8-0.png" height="345" width="210" />

**版本支持。**支持以下版本的 NDB Cluster 升级到 NDB Cluster 8.0（8.0.19 及更高版本）的 GA 版本：

-   NDB Cluster 7.6：NDB 7.6.4 及更高版本

-   NDB Cluster 7.5：NDB 7.5.4 及更高版本

-   NDB Cluster 7.4：NDB 7.4.6 及更高版本

    要从 NDB 7.4 之前的版本系列升级，您必须分阶段升级，首先升级到刚刚列出的版本之一，然后从该版本升级到最新的 NDB 8.0 版本。在这种情况下，建议首先升级到最新的 NDB 7.6 版本。

**已知的问题。**升级到 NDB 8.0 版本或在 NDB 8.0 版本之间会发生以下问题：

-   不支持从 NDB 8.0 在线降级到以前的版本。在 NDB 8.0 中创建的表与以前的版本不向后兼容。这是由于额外元数据属性的使用发生了变化`新开发银行`表提供对 MySQL 数据字典的全面支持。

    有关详细信息，请参阅[NDB 表额外元数据的变化](mysql-cluster-what-is-new.html#mysql-cluster-what-is-new-8-0-extra-metadata).也可以看看[第 14 章，*MySQL 数据字典*](data-dictionary.html).

-   在 NDB 8.0 中，默认值更改为[`log_bin`](replication-options-binary-log.html#sysvar_log_bin)（从 0 到 1）和[`ndb_log_bin`](mysql-cluster-options-variables.html#sysvar_ndb_log_bin)（从 1 到 0）。这意味着您现在必须显式设置`ndb_log_bin`为 1 以启用二进制日志记录。

-   MySQL 服务器之间共享的分布式权限，如先前版本系列中实现的那样（请参阅[使用共享授权表的分布式特权](https://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-privilege-distribution.html)) 在 NDB Cluster 8.0 中不受支持。开始时，[**mysqld**](mysqld.html)随 NDB 8.0 和更高版本一起提供，检查是否存在使用`新开发银行`存储引擎；如果找到，它会使用这些创建本地副本（“影子表”）`InnoDB`.对于连接到 NDB Cluster 的每个 MySQL 服务器都是如此。在充当 NDB Cluster SQL 节点的所有 MySQL 服务器上执行此操作后，`新开发银行`授权表可以使用[**数据库\_降低\_桌子**](mysql-cluster-programs-ndb-drop-table.html)NDB Cluster 发行版提供的实用程序，如下所示：

    ```
    ndb_drop_table -d mysql user db columns_priv tables_priv proxies_priv procs_priv
    ```

    保留它是安全的`新开发银行`授权表，但它们不用于访问控制并且被有效地忽略。

    有关 NDB 8.0 中使用的 MySQL 权限系统的更多信息，请参阅[第 23.6.12 节，“权限同步和 NDB\_已储存\_用户”](mysql-cluster-privilege-synchronization.html)， 也[第 6.2.3 节，“授权表”](grant-tables.html).

-   在 NDB 8.0 中，二进制配置文件格式已得到增强，以支持比以前版本更多的节点。运行旧版本的节点无法访问新格式`新开发银行`，尽管较新的管理服务器可以检测较旧的节点并使用适当的格式与它们通信。

    在这方面升级到 NDB 8.0 应该没有问题。从 NDB 8.0 降级到以前的版本时，由于旧的管理服务器无法读取较新的二进制配置文件格式，因此需要一些手动干预。执行此类降级时，有必要在使用旧版本开始管理之前删除所有缓存的二进制配置文件`新开发银行`软件版本，并有明文配置文件可供管理服务器读取。或者，您可以使用[`- 最初的`](mysql-cluster-programs-ndb-mgmd.html#option_ndb_mgmd_initial)选项（再次，有必要有`配置文件`可用的）。如果集群使用多个管理服务器，则必须为每个管理服务器二进制文件完成这两件事之一。

    由于数据节点 LCP 在 NDB 8.0 中实施的不兼容更改，还与对增加节点数量的支持有关`系统文件`，当从 NDB 8.0 在线降级到以前的 NDB Cluster 版本时，有必要使用[`- 最初的`](mysql-cluster-programs-ndbd.html#option_ndbd_initial)选项。

    重新启动数据节点[`- 最初的`](mysql-cluster-programs-ndbd.html#option_ndbd_initial)将 NDB 7.6.4 之前的任何版本升级到任何 NDB 8.0 版本时也需要。

-   不支持将运行超过 48 个数据节点的集群或使用节点 ID 大于 48 的数据节点的集群直接降级到 NDB 8.0 的早期 NDB Cluster 版本。在这种情况下，有必要减少数据节点的数量，更改所有数据节点的配置，使其使用小于或等于 48 的节点 ID，或两者兼而有之，以不超过旧的最大值。

-   如果要从NDB 8.0降级到NDB 7.5或NDB 7.4，则必须为[`索引记忆`](mysql-cluster-ndbd-definition.html#ndbparam-ndbd-indexmemory)在群集配置文件中，如果没有。这是因为NDB 8.0不使用该参数（该参数在NDB 7.6中已删除），并在默认情况下将其设置为0，而NDB 7.5和NDB 7.4中需要该参数，在这两种情况下，群集都拒绝使用从管理服务器接收到的无效配置启动。。。如果`索引记忆`未设置为非零值。

    背景`索引记忆`是*不*从NDB 8.0降级至NDB 7.6所需。

-   NDB 8.0.22为网络中的管理节点和数据节点添加了对IPv6寻址的支持`配置。伊尼`文件要开始在升级过程中使用IPv6地址，请执行以下步骤：

    1.  以常规方式将群集升级至8.0.22版或NDB群集软件的更高版本。

    2.  更改中使用的地址`配置。伊尼`文件到IPv6地址。

    3.  执行群集的系统重启。

-   由于内部环境的变化`mysql。ndb_模式`表中，如果您升级到8.0.24之前的NDB 8.0版本，则建议您使用[`ndb_schema_dist_upgrade_allowed=0`](mysql-cluster-options-variables.html#sysvar_ndb_schema_dist_upgrade_allowed)避免意外停机（错误#30876990，错误#31016905）。

-   如果使用多线程数据节点([**ndbmtd**](mysql-cluster-programs-ndbmtd.html))还有[`ThreadConfig`](mysql-cluster-ndbd-definition.html#ndbparam-ndbmtd-threadconfig)配置参数，您可能需要在`配置。伊尼`从早期版本升级到NDB 8.0.30或更高版本时的文件。从NDB 8.0.23或更早版本升级时`主要的`, `代表`, `记录`或`ldm`必须显式设置早期版本中隐含的线程。从NDB 8.0.23或更高版本升级到NDB 8.0.30或更高版本时`记录`线程必须在`ThreadConfig`一串此外，要避免使用`主要的`, `代表`或`ldm`在NDB 8.0.30或更高版本中，必须将给定类型的线程数设置为`0`明确地

    下面是一个例子。

    *NDB 8.0.22及更早版本*:

    -   `配置。伊尼`文件包含`ThreadConfig=ldm`.

    -   这些版本的`NDB`像`ThreadConfig=main、ldm、recv、rep`.

    -   要求在`配置。伊尼`要匹配NDB 8.0.30或更高版本中的效果：`ThreadConfig=main、ldm、recv、rep`.

    *NDB 8.0.23-8.0.29*:

    -   `配置。伊尼`文件包含`ThreadConfig=ldm`.

    -   这些版本的`NDB`像`ThreadConfig=ldm，recv`.

    -   要求在`配置。伊尼`要匹配NDB 8.0.30或更高版本中的效果：`ThreadConfig=main={count=0}，ldm，recv，rep={count=0}`.

        有关更多信息，请参阅的说明[`ThreadConfig`](mysql-cluster-ndbd-definition.html#ndbparam-ndbmtd-threadconfig)配置参数。
