#### 23.5.23.1 将 NDB 备份恢复到不同版本的 NDB Cluster

[](<>)

以下两节提供有关将本机 NDB 备份还原到与进行备份的版本不同的 NDB Cluster 版本的信息。

此外，您应该咨询[第 23.3.7 节，“升级和降级 NDB 集群”](mysql-cluster-upgrade-downgrade.html)，对于尝试将 NDB 备份还原到运行不同版本的 NDB 软件的集群时可能遇到的其他问题。

也建议复习[NDB Cluster 8.0 中的新功能](mysql-cluster-what-is-new.html#mysql-cluster-what-is-new-8-0)， 也[第 2.11.4 节，“MySQL 8.0 中的更改”](upgrading-from-previous-series.html)，对于 NDB 8.0 和以前版本的 NDB Cluster 之间可能与您的特定情况相关的其他更改。

##### 23.5.23.1.1 将 NDB 备份恢复到以前版本的 NDB Cluster

[](<>)

由于使用了早期版本中不存在的功能，您可能会在从 NDB Cluster 的更高版本恢复到以前的备份时遇到问题。此处列出了其中一些问题：

-   **utf8mb4\_艾\_ci 字符集。**默认情况下，在 NDB 8.0 中创建的表使用`utf8mb4_ai_ci`字符集，在 NDB 7.6 及更早版本中不可用，因此无法被[**数据库\_恢复**](mysql-cluster-programs-ndb-restore.html)来自这些早期版本之一的二进制文件。在这种情况下，有必要使用`utf8mb4_ai_ci`以便他们在执行备份之前使用旧版本支持的字符集。

-   **表元数据格式。**由于 MySQL 服务器和 NDB 处理表元数据的方式发生了变化，使用 NDB 8.0 中包含的 MySQL 服务器二进制文件创建或更改的表无法使用恢复[**数据库\_恢复**](mysql-cluster-programs-ndb-restore.html)到 NDB 7.6 或更早版本的 NDB Cluster。这样的表使用`.sdi`旧版本不理解的文件[**mysqld**](mysqld.html).

    在 NDB 8.0 中对在 NDB 7.6 或更早版本中创建的表进行备份，并且自升级到 NDB 8.0 以来未更改，应该可以恢复到旧版本的 NDB Cluster。

    由于可以分别恢复元数据和表数据，因此在这种情况下，您可以从使用制作的转储中恢复表模式[**mysql转储**](mysqldump.html)，或通过执行必要的[`创建表`](create-table.html)手动语句，然后使用仅导入表数据[**数据库\_恢复**](mysql-cluster-programs-ndb-restore.html)与[`--恢复数据`](mysql-cluster-programs-ndb-restore.html#option_ndb_restore_restore-data)选项。

-   **多线程备份。**在 NDB 8.0 中进行的多线程备份可以恢复到运行早期版本的集群`新开发银行`通过以下两种方式之一：

    -   使用[**数据库\_恢复**](mysql-cluster-programs-ndb-restore.html)来自 NDB 8.0 的二进制文件，执行并行还原。看[第 23.5.23.3.1 节，“并行恢复并行备份”](ndb-restore-parallel-data-node-backup.html#ndb-restore-parallel-backup-in-parallel).

    -   串行恢复备份；在这种情况下，更高版本的[**数据库\_恢复**](mysql-cluster-programs-ndb-restore.html)不需要。看[第 23.5.23.3.2 节，“串行恢复并行备份”](ndb-restore-parallel-data-node-backup.html#ndb-restore-parallel-backup-serial).

-   **加密备份。**在 NDB 8.0.22 及更高版本中创建的加密备份无法使用[**数据库\_恢复**](mysql-cluster-programs-ndb-restore.html)从 NDB 8.0.21 或更早版本开始。

-   **新开发银行\_已储存\_用户权限。**这[`NDB_STORED_USER`](privileges-provided.html#priv_ndb-stored-user)权限仅在 NDB 8.0 中受支持。

-   **最大数据节点数。**NDB Cluster 8.0 最多支持 144 个数据节点，而早期版本最多仅支持 48 个数据节点。看[第 23.5.23.2.1 节，“恢复到比原始节点更少的节点”](ndb-restore-different-number-nodes.html#ndb-restore-to-fewer-nodes)，以获取有关此不兼容性导致问题的情况的信息。

##### 23.5.23.1.2 将 NDB 备份恢复到更高版本的 NDB Cluster

[](<>)

一般来说，应该可以恢复使用[**数据库\_毫克**](mysql-cluster-programs-ndb-mgm.html)客户[`开始备份`](mysql-cluster-backup-using-management-client.html)将旧版本 NDB 中的命令转换为新版本，前提是您使用[**数据库\_恢复**](mysql-cluster-programs-ndb-restore.html)较新版本附带的二进制文件。（可以使用旧版本的[**数据库\_恢复**](mysql-cluster-programs-ndb-restore.html)，但不建议这样做。）此处列出了其他潜在问题：

-   从备份中恢复元数据时 ([`--restore-meta`](mysql-cluster-programs-ndb-restore.html#option_ndb_restore_restore-meta)选项），[**数据库\_恢复**](mysql-cluster-programs-ndb-restore.html)通常会尝试完全按照进行备份时的方式复制捕获的表模式。

    在 8.0 之前的 NDB 版本中创建的表使用`.frm`文件的元数据。这些文件可以被[**mysqld**](mysqld.html)在 NDB 8.0 中，它可以使用其中包含的信息来创建`.sdi`MySQL 数据字典在以后版本中使用的文件。

-   将较旧的备份还原到较新版本的 NDB 时，可能无法利用较新的功能，例如 hashmap 分区、更多的 hashmap 存储桶、读取备份和不同的分区布局。出于这个原因，最好使用恢复旧模式[**mysql转储**](mysqldump.html)和[**mysql**](mysql.html)客户端，它允许 NDB 使用新的模式特性。

-   使用不支持小数秒的旧时间类型的表（在 MySQL 5.6.4 和 NDB 7.3.31 之前使用）无法使用以下方法恢复到 NDB 8.0[**数据库\_恢复**](mysql-cluster-programs-ndb-restore.html).您可以使用[`检查表`](check-table.html)，然后将它们升级到更新的时间列格式，如有必要，使用[`维修台`](repair-table.html)在里面[**mysql**](mysql.html)客户;这必须在进行备份之前完成。看[第 2.11.5 节，“准备升级安装”](upgrade-prerequisites.html)， 了解更多信息。

    您还可以使用创建的转储来恢复此类表[**mysql转储**](mysqldump.html).

-   NDB 8.0 不支持在 NDB 7.6 及更早版本中创建的分布式授权表。此类表可以还原到 NDB 8.0 集群，但它们对访问控制没有影响。
