以下两节提供有关将本机 NDB 备份恢复到与备份所在版本不同的 NDB Cluster 版本的信息。
此外,您应该查阅 第 23.3.7 节,“升级和降级 NDB Cluster”,了解在尝试将 NDB 备份恢复到运行不同版本的 NDB 软件的集群时可能遇到的其他问题。
还建议查看 NDB Cluster 8.0 中的新增功能以及 第 2.11.4 节,“MySQL 8.0 中的更改”,了解 NDB 8.0 和之前版本的 NDB Cluster 之间可能与您的特定情况相关的其他更改。
由于使用了早期版本中不存在的功能,将从更高版本的 NDB Cluster 获取的备份恢复到先前版本时,您可能会遇到问题。此处列出了其中一些问题:
utf8mb4_ai_ci 字符集。 默认情况下,在 NDB 8.0 中创建的表使用
utf8mb4_ai_ci
字符集,这在 NDB 7.6 及更早版本中不可用,因此不能由这些早期版本之一的ndb_restore二进制文件读取。在这种情况下,有必要更改任何使用的表,utf8mb4_ai_ci
以便它们在执行备份之前使用旧版本中支持的字符集。表元数据格式。 由于 MySQL 服务器和 NDB 处理表元数据的方式发生变化,使用 NDB 8.0 中包含的 MySQL 服务器二进制文件创建或更改的表无法使用ndb_restore恢复到 NDB 7.6 或早期版本的 NDB Cluster。这些表使用旧版本的mysqld
.sdi
无法理解的文件 。在 NDB 8.0 中创建的在 NDB 7.6 或更早版本中创建的表的备份,以及自升级到 NDB 8.0 以来未更改的表,应该可以恢复到旧版本的 NDB Cluster。
由于可以分别恢复元数据和表数据,在这种情况下,您可以从使用 mysqldump生成的转储中恢复表模式,或者通过手动执行必要的语句,然后使用带 选项 的ndb_restore
CREATE TABLE
仅导入表数据。--restore-data
多线程备份。
NDB
在 NDB 8.0 中进行的多线程备份可以通过以下两种方式之一 恢复到运行早期版本的集群 :使用来自 NDB 8.0 的ndb_restore二进制文件,执行并行恢复。请参阅 第 23.5.23.3.1 节,“并行恢复并行备份”。
串行恢复备份;在这种情况下,不需要更高版本的ndb_restore。请参阅 第 23.5.23.3.2 节,“串行恢复并行备份”。
加密备份。 在 NDB 8.0.22 及更高版本中创建的加密备份无法使用 NDB 8.0.21或更早版本的 ndb_restore 恢复。
NDB_STORED_USER 特权。 该
NDB_STORED_USER
权限仅在 NDB 8.0 中受支持。最大数据节点数。 NDB Cluster 8.0 最多支持 144 个数据节点,而早期版本最多只支持 48 个数据节点。有关此不兼容性导致问题的情况的信息, 请参阅 第 23.5.23.2.1 节,“恢复到比原来更少的节点” 。
通常,应该可以将在旧版本 NDB 中使用ndb_mgm客户端
START BACKUP
命令创建的备份恢复到新版本,前提是您使用新版本附带的ndb_restore二进制文件。(可能可以使用旧版本的ndb_restore,但不推荐这样做。)此处列出了其他潜在问题:
从备份(
--restore-meta
选项)恢复元数据时,ndb_restore通常会尝试完全按照备份时的原样重现捕获的表模式。在 8.0 之前的 NDB 版本中创建的表使用
.frm
文件作为其元数据。NDB 8.0中的mysqld可以读取这些文件 ,可以使用其中包含的信息创建.sdi
以后版本的MySQL数据字典使用的文件。将较旧的备份恢复到较新版本的 NDB 时,可能无法利用较新的功能,例如 hashmap 分区、更多的 hashmap 桶、读取备份和不同的分区布局。出于这个原因,最好使用mysqldump 和mysql客户端恢复旧模式,这允许 NDB 使用新模式功能。
使用不支持小数秒的旧时间类型的表(在 MySQL 5.6.4 和 NDB 7.3.31 之前使用)无法使用 ndb_restore恢复到 NDB 8.0 。您可以使用 来检查此类表
CHECK TABLE
,然后将它们升级到更新的时间列格式,如有必要,REPAIR TABLE
在mysql客户端中使用;这必须在进行备份之前完成。有关详细信息,请参阅 第 2.11.5 节“准备升级安装”。您还可以使用通过mysqldump 创建的转储来恢复此类表 。
NDB 8.0 不支持在 NDB 7.6 及更早版本中创建的分布式授权表。此类表可以恢复到 NDB 8.0 集群,但它们对访问控制没有影响。