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