NDB 集群恢复程序实现为单独的命令行实用程序 ndb_restore,通常可以在 MySQL bin
目录中找到。该程序读取备份结果文件,并将存储的信息插入数据库。
ndb_restore 必须为每个备份文件执行一次,该文件是使用 START BACKUP
命令创建的备份(见 第 25.6.8.2 节,“使用 NDB 集群管理客户端创建备份”)。这等于在创建备份时集群中的数据节点数。
在使用 ndb_restore 之前,建议将集群设置为单用户模式,除非您正在并行恢复多个数据节点。请参阅 第 25.6.6 节,“NDB 集群单用户模式”,以获取更多信息。
可以与 ndb_restore 一起使用的选项如下表所示。表后面是详细描述。
表 25.41 与程序 ndb_restore 一起使用的命令行选项
Format | Description | Added, Deprecated, or Removed |
---|---|---|
允许更改表的主键列集 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
将数据追加到制表符分隔文件 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
为解密加密备份提供密码;请参阅文档以获取允许的值 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
从 STDIN 安全地获取解密密码;与 --decrypt 选项一起使用 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
备份文件目录路径 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
从具有该 ID 的备份中恢复 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
--connectstring 的别名 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
在放弃之前尝试连接的次数 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
在尝试联系管理服务器之间的等待秒数 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
与 --ndb-connectstring 相同 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
在错误时写入核心文件;用于调试 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
解密加密的备份;需要 --backup-password |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
在全局文件读取后读取给定的文件 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
仅从给定的文件读取默认选项 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
也读取带有 concat(group, suffix) 的组 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
忽略备份中的索引;可能减少恢复数据所需的时间 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
不忽略系统表 during restore;仅供实验使用,不适用于生产环境 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
要排除的一个或多个数据库的列表(包括未命名的那些) |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
不恢复来自 ALTER TABLE 操作的中间表(名称以 '#sql-' 开头);指定 FALSE 以恢复这些表 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
忽略备份版本的表中缺失的列 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
忽略备份中的表,如果它们在数据库中不存在 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
要排除的一个或多个表的列表(包括同一数据库中未命名的那些);每个表引用必须包括数据库名称 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
字段括号由这个字符 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
字段可选括号由这个字符 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
字段终止符由这个字符 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
|
显示帮助文本并退出 |
(在所有基于 MySQL 8.3 的 NDB 发布版本中支持) |
以十六进制格式打印二进制类型 |
(在所有基于 MySQL 8.3 的 NDB 发布版本中支持) |
|
忽略日志条目中的扩展主键更新 |
(在所有基于 MySQL 8.3 的 NDB 发布版本中支持) |
|
要还原的数据库列表(排除未命名的数据库) |
(在所有基于 MySQL 8.3 的 NDB 发布版本中支持) |
|
还原共享用户和授予权限到 ndb_sql_metadata 表 |
(在所有基于 MySQL 8.3 的 NDB 发布版本中支持) |
|
要还原的表列表(排除同一数据库中未命名的表);每个表引用必须包括数据库名称 |
(在所有基于 MySQL 8.3 的 NDB 发布版本中支持) |
|
行以该字符结尾 |
(在所有基于 MySQL 8.3 的 NDB 发布版本中支持) |
|
从登录文件中读取给定路径 |
(在所有基于 MySQL 8.3 的 NDB 发布版本中支持) |
|
不从登录路径文件中读取登录路径 |
(在所有基于 MySQL 8.3 的 NDB 发布版本中支持) |
|
允许列值的损失转换(类型降级或符号变化)时还原数据 |
(在所有基于 MySQL 8.3 的 NDB 发布版本中支持) |
|
如果 mysqld 连接并使用二进制日志,不记录还原的数据 |
(在所有基于 MySQL 8.3 的 NDB 发布版本中支持) |
|
不从任何选项文件中读取默认选项,除了登录文件 |
(在所有基于 MySQL 8.3 的 NDB 发布版本中支持) |
|
不还原与磁盘数据相关的对象 |
(在所有基于 MySQL 8.3 的 NDB 发布版本中支持) |
|
不升级数组类型以resize VAR 数据,不更改列属性 |
(在所有基于 MySQL 8.3 的 NDB 发布版本中支持) |
|
设置连接字符串以连接到 ndb_mgmd。语法:"[nodeid=id;][host=]hostname[:port]"。覆盖 NDB_CONNECTSTRING 和 my.cnf 中的条目 |
(在所有基于 MySQL 8.3 的 NDB 发布版本中支持) |
|
NDB 管理客户端 TLS 要求级别 |
添加:8.3.0 |
|
同 --ndb-connectstring |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
指定节点组映射;未使用,不支持 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
设置此节点的节点 ID,覆盖 --ndb-connectstring 设置的 ID |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
包含 TLS 密钥和证书的目录列表 |
添加:8.3.0 |
|
备份所在节点的 ID |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
恢复时应用的 slice 数量 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
恢复数据时使用的并行事务数量 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
允许在将固定宽度字符串类型提升到可变宽度类型时保留尾随空格(包括填充) |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
将元数据、数据和日志打印到 stdout(等同于 --print-meta --print-data --print-log) |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
将数据打印到 stdout |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
打印程序参数列表并退出 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
将日志打印到 stdout |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
将元数据打印到 stdout |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
将 SQL 日志写入 stdout |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
每隔给定秒数打印恢复状态 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
允许在从备份中还原数据时提升属性 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
使用多线程重新构建备份中的有序索引;线程数由 BuildIndexThreads 设置确定 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
使用指定的函数和参数将偏移量应用于指定列的值。格式为 [db].[tbl].[col]:[fn]:[args];请参阅文档以获取详细信息 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
使用 NDB API 将表数据和日志还原到 NDB 集群中 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
将时期信息还原到状态表中;在副本集群中用于启动复制;在 mysql.ndb_apply_status 表中更新或插入 ID 为 0 的行 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
使用 NDB API 将元数据还原到 NDB 集群中 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
还原之前移到 NDB 的 MySQL 权限表 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
将还原到不同名称的数据库;格式为 olddb,newdb |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
忽略备份文件中的缺失 blob 表 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
跳过还原期间的表结构检查 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
在还原备份时忽略 ndb_restore 不认识的 schema 对象 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
切片 ID,当按切片还原时 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
在提供的路径中为每个表创建一个制表符分隔的 .txt 文件 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
在所有信息、错误和调试日志消息前添加时间戳 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
显示帮助文本并退出;与 --help 相同 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
输出的详细级别 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
显示版本信息并退出 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
还原 ndb_apply_status 表。需要 --restore-data |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
-
Command-Line Format --allow-pk-changes[=0|1]
Type 整数 Default Value 0
Minimum Value 0
Maximum Value 1
当该选项设置为
1
时,ndb_restore 允许表定义中的主键与备份中的主键不同。这可能是在备份和恢复之间的不同 schema 版本中有主键更改的表时,使用 ndb_restore 进行恢复操作比发出多个ALTER TABLE
语句更简单或更高效。以下是
--allow-pk-changes
支持的主键定义更改:-
扩展主键: 备份中的表 schema 中存在的非空列变成表的主键的一部分。
Important在扩展表的主键时,任何变成主键的一部分的列不能在备份时被更新;任何在 ndb_restore 中发现的更新将导致恢复操作失败,即使值没有变化。在某些情况下,可以使用
--ignore-extended-pk-updates
选项来覆盖这种行为;请参阅该选项的描述以获取更多信息。 -
缩小主键 (1): 备份 schema 中的表的主键中的一列不再是主键的一部分,但仍然存在于表中。
-
缩小主键 (2): 备份 schema 中的表的主键中的一列从表中完全删除。
这些差异可以与 ndb_restore 支持的其他 schema 差异结合使用,包括 blob 和文本列的更改,需要使用暂存表。
使用主键 schema 更改的典型场景的基本步骤如下:
-
使用 ndb_restore
--restore-meta
还原表 schema -
更改 schema 到所需的 schema,或者创建它
-
备份所需的 schema
-
使用 ndb_restore
--disable-indexes
使用上一步的备份,删除索引和约束 -
运行 ndb_restore
--allow-pk-changes
(可能与--ignore-extended-pk-updates
、--disable-indexes
及其他选项一起使用) 以还原所有数据 -
运行 ndb_restore
--rebuild-indexes
使用具有所需模式的备份,以重建索引和约束
当扩展主键时,可能需要 ndb_restore 使用临时次要唯一索引在还原操作期间从旧主键映射到新主键。这样的索引仅在必要时创建,以应用备份日志中的事件到具有扩展主键的表。该索引名为
NDB$RESTORE_PK_MAPPING
,并在每个需要它的表上创建;如果需要,可以由多个 ndb_restore 实例共享,运行在并行中。(在还原过程结束时运行 ndb_restore--rebuild-indexes
导致该索引被删除。) -
-
Command-Line Format --append
当与
--tab
和--print-data
选项一起使用时,该选项将数据追加到具有相同名称的现有文件中。 -
--backup-path
=dir_name
Command-Line Format --backup-path=path
Type 目录名称 Default Value ./
备份目录的路径是必需的;这将被提供给 ndb_restore 使用
--backup-path
选项,并且必须包括备份的子目录,例如,如果数据节点的DataDir
是/var/lib/mysql-cluster
,那么备份目录是/var/lib/mysql-cluster/BACKUP
,并且备份文件可以在/var/lib/mysql-cluster/BACKUP/BACKUP-3
中找到。路径可以是绝对的或相对于 ndb_restore 可执行文件所在的目录,可以选择性地以backup-path=
作为前缀。可以将备份还原到具有不同配置的数据库中。例如,假设备份 ID
12
是在具有两个存储节点(节点 ID2
和3
)的集群中创建的,现在要将其还原到具有四个节点的集群中。那么 ndb_restore 必须两次运行——每个存储节点一次。但是,ndb_restore 不能总是将备份从一个 MySQL 版本的集群还原到另一个 MySQL 版本的集群中。请参阅 第 25.3.7 节,“升级和降级 NDB 集群”,以获取更多信息。Important无法使用较旧版本的NDB Cluster来还原从较新版本的NDB Cluster创建的备份。你可以将较新版本的MySQL备份还原到较旧的集群中,但必须使用较新版本的NDB Cluster中的ndb_restore副本来执行此操作。
例如,要将从NDB Cluster 8.0.35版本的集群备份还原到NDB Cluster 7.6.28版本的集群中,你必须使用NDB Cluster 7.6.28版本中的ndb_restore副本。
为了快速还原,可以并行还原数据,前提是有足够的集群连接可用。也就是说,当并行还原到多个节点时,你必须在集群的
config.ini
文件中为每个并发ndb_restore进程提供一个[api]
或[mysqld]
部分。然而,数据文件必须始终在日志之前应用。 -
Command-Line Format --backup-password=密码
Type 字符串 Default Value [none]
该选项指定了用于解密加密备份的密码,该密码必须与用于加密备份的密码相同。
密码的长度必须在1到256个字符之间,必须用单引号或双引号括起来。它可以使用任何可打印的ASCII字符,除了
!
、'
、"
、$
、%
、\
和^
。你可以省略密码,在这种情况下ndb_restore将等待从
stdin
输入密码,类似于使用--backup-password-from-stdin
时。 -
--backup-password-from-stdin[=TRUE|FALSE]
Command-Line Format --backup-password-from-stdin
当使用
--backup-password
时,该选项启用从系统shell(stdin
)输入备份密码,类似于使用mysql时交互式输入密码。 -
--backupid
=#
,-b
Command-Line Format --backupid=#
Type 数字 Default Value none
该选项是必需的,用于指定备份的ID或序列号,该数字与管理客户端在备份完成时显示的数字相同。(见第 25.6.8.2 节,“使用 NDB 集群管理客户端创建备份”。)
Important在还原集群备份时,你必须确保从具有相同备份 ID 的备份中还原所有数据节点。使用来自不同备份的文件将导致集群恢复到不一致的状态,或者完全失败。
-
Command-Line Format --字符集目录=path
包含字符集的目录。
-
--连接
,-c
Command-Line Format --连接=连接字符串
Type 字符串 Default Value localhost:1186
别名为
--ndb-connectstring
。 -
Command-Line Format --连接重试次数=#
Type 整数 Default Value 12
Minimum Value 0
Maximum Value 12
在放弃之前重试连接的次数。
-
Command-Line Format --连接重试延迟=#
Type 整数 Default Value 5
Minimum Value 0
Maximum Value 5
在尝试联系管理服务器之间等待的秒数。
-
Command-Line Format --连接字符串=连接字符串
Type 字符串 Default Value [none]
与
--ndb-connectstring
相同。 -
Command-Line Format --核心文件
在错误时写入核心文件;用于调试。
-
Command-Line Format --解密
使用
--backup-password
选项提供的密码解密加密的备份。 -
Command-Line Format --额外默认文件=path
Type 字符串 Default Value [none]
在全局文件读取后读取给定的文件。
-
Command-Line Format --默认文件=path
Type 字符串 Default Value [none]
仅从给定的文件读取默认选项。
-
Command-Line Format --默认组后缀=字符串
Type 字符串 Default Value [none]
也读取带有 concat(group, suffix) 的组。
-
Command-Line Format --禁用索引
在从原生 NDB 备份还原数据时禁用索引的还原。随后,可以使用
--rebuild-indexes
多线程重建所有表的索引,这应该比并发重建大表的索引更快。此选项还会删除备份中指定的任何外键。
MySQL 可以打开一个
NDB
表,即使其中一个或多个索引找不到,只要查询不使用这些受影响的索引;否则,查询将被拒绝,错误代码为ER_NOT_KEYFILE
。在后一种情况下,您可以通过执行一个ALTER TABLE
语句来临时解决问题,例如:ALTER TABLE tbl ALTER INDEX idx INVISIBLE;
这将导致 MySQL 忽略表
tbl
上的索引idx
。请参阅 主键和索引,以获取更多信息,以及 第 10.3.12 节,“不可见索引”。 -
Command-Line Format --dont-ignore-systab-0
通常,当恢复表数据和元数据时,ndb_restore 将忽略备份中的
NDB
系统表的副本。--dont-ignore-systab-0
选项将导致系统表被恢复。该选项仅供实验和开发使用,不建议在生产环境中使用。 -
--exclude-databases
=db-list
Command-Line Format --exclude-databases=list
Type 字符串 Default Value 逗号分隔的数据库列表,不应被恢复。
该选项通常与
--exclude-tables
选项结合使用;请参阅该选项的描述,以获取更多信息和示例。 -
--exclude-intermediate-sql-tables[
=TRUE|FALSE]
Command-Line Format --exclude-intermediate-sql-tables[=TRUE|FALSE]
Type 布尔值 Default Value TRUE
在执行
ALTER TABLE
操作时,mysqld 创建中间表(其名称以#sql-
开头)。当TRUE
时,--exclude-intermediate-sql-tables
选项将阻止 ndb_restore 恢复这些可能留下的中间表。该选项默认为TRUE
。 -
Command-Line Format --exclude-missing-columns
使用该选项可以仅恢复选定的表列,ndb_restore 将忽略备份中的表与恢复的表之间缺少的列。该选项适用于所有被恢复的表。如果您想将该选项仅应用于选定的表或数据库,可以与一个或多个
--include-*
或--exclude-*
选项结合使用,然后使用补充的选项集恢复数据到剩余的表。 -
Command-Line Format --exclude-missing-tables
使用该选项,可以从备份中恢复选择的表,而不是整个数据库,这将导致ndb_restore忽略备份中的任何不在目标数据库中的表。
-
--exclude-tables
=table-list
Command-Line Format --exclude-tables=list
Type 字符串 Default Value 要排除的表列表;每个表引用必须包括数据库名称。通常与
--exclude-databases
一起使用。当
--exclude-databases
或--exclude-tables
被使用时,只有那些被选项命名的数据库或表被排除;所有其他数据库和表都将被ndb_restore恢复。以下表格显示了使用ndb_restore的多个调用,使用
--exclude-*
选项(其他可能需要的选项已被省略以提高清晰度),以及这些选项对从NDB Cluster备份恢复的影响:表 25.42 使用--exclude-*选项的ndb_restore多个调用,以及这些选项对从NDB Cluster备份恢复的影响。
Option Result --exclude-databases=db1
所有数据库中的所有表,除了 db1
中的表,都将被恢复;db1
中的表将不被恢复--exclude-databases=db1,db2
(或--exclude-databases=db1
--exclude-databases=db2
)所有数据库中的所有表,除了 db1
和db2
中的表,都将被恢复;db1
和db2
中的表将不被恢复--exclude-tables=db1.t1
除了 t1
表外,数据库db1
中的所有表都将被恢复;所有其他数据库中的所有表都将被恢复--exclude-tables=db1.t2,db2.t1
(或--exclude-tables=db1.t2
--exclude-tables=db2.t1)
数据库 db1
中的所有表,除了t2
表外,和数据库db2
中的所有表,除了t1
表外,都将被恢复;所有其他数据库中的所有表都将被恢复
你可以一起使用这两个选项。例如,以下命令将所有数据库中的所有表,除了数据库
db1
和db2
,和数据库db3
中的表t1
和t2
,都将被恢复:$> ndb_restore [...] --exclude-databases=db1,db2 --exclude-tables=db3.t1,db3.t2
(我们已经省略了其他可能需要的选项,以提高清晰度和简洁性。)
你可以使用
--include-*
和--exclude-*
选项一起,subject to the following rules:-
所有
--include-*
和--exclude-*
选项的操作都是累积的。 -
所有
--include-*
和--exclude-*
选项都将按照从右到左的顺序被评估。 -
在出现冲突的选项时,第一个(右侧)选项优先。在其他 words,第一个(从右到左)匹配数据库或表的选项“获胜”。
例如,以下选项集将导致ndb_restore恢复数据库
db1
中的所有表,除了db1.t1
,同时不恢复任何其他数据库中的表:--include-databases=db1 --exclude-tables=db1.t1
然而,将选项的顺序颠倒只是导致所有来自数据库
db1
的表被恢复(包括db1.t1
,但没有来自其他数据库的表),因为--include-databases
选项,位于最右侧,是第一个匹配数据库db1
的匹配项,因此优先于任何其他选项,该选项匹配db1
或db1
中的任何表:--exclude-tables=db1.t1 --include-databases=db1
-
-
--fields-enclosed-by
=char
Command-Line Format --fields-enclosed-by=char
Type 字符串 Default Value 每个列值都被传递给该选项的字符串所enclose(无论数据类型;见
--fields-optionally-enclosed-by
的描述)。 -
--fields-optionally-enclosed-by
Command-Line Format --fields-optionally-enclosed-by
Type 字符串 Default Value 传递给该选项的字符串用于enclose包含字符数据的列值(例如
CHAR
、VARCHAR
、BINARY
、TEXT
或ENUM
)。 -
Command-Line Format --fields-terminated-by=char
Type 字符串 Default Value \t (tab)
传递给该选项的字符串用于分隔列值。默认值是一个制表符 (
\t
)。 -
Command-Line Format --help
显示帮助文本并退出。
-
Command-Line Format --hex
如果使用该选项,则所有二进制值将以十六进制格式输出。
-
Command-Line Format --ignore-extended-pk-updates[=0|1]
Type 整数 Default Value 0
Minimum Value 0
Maximum Value 1
使用
--allow-pk-changes
时,表的主键列不能在备份过程中被更新;这些列的值应该从插入时保持不变,直到包含这些值的行被删除。如果 ndb_restore 在恢复备份时遇到这些列的更新,恢复将失败。在某些应用程序中,可能会在更新行时设置所有列的值,即使某些列的值没有更改。在这种情况下,可以将--ignore-extended-pk-updates
设置为1
,强制 ndb_restore 忽略这些更新。Important在忽略这些更新时,用户负责确保主键列的值不被更新。
有关更多信息,请参阅
--allow-pk-changes
的描述。 -
--include-databases
=数据库列表
Command-Line Format --include-databases=列表
Type 字符串 Default Value 以逗号分隔的数据库列表,用于恢复。通常与
--include-tables
选项一起使用;请参阅该选项的描述以获取更多信息和示例。 -
Command-Line Format --include-stored-grants
ndb_restore 默认情况下不会恢复共享用户和权限(请参阅 第 25.6.13 节,“权限同步和 NDB_STORED_USER”)到
ndb_sql_metadata
表中。指定该选项将导致其执行此操作。 -
--include-tables
=表列表
Command-Line Format --include-tables=列表
Type 字符串 Default Value 以逗号分隔的表列表,用于恢复;每个表引用必须包括数据库名称。
当
--include-databases
或--include-tables
选项被使用时,只有那些被选项命名的数据库或表被恢复;所有其他数据库和表都被 ndb_restore 排除,并且不被恢复。以下表格显示了使用
--include-*
选项的多个 ndb_restore 调用(其他可能需要的选项已被省略以提高清晰度),以及这些选项对从 NDB 集群备份恢复的影响:表 25.43 使用 --include-* 选项的多个 ndb_restore 调用,以及这些选项对从 NDB 集群备份恢复的影响。
Option Result --include-databases=db1
只有数据库 db1
中的表被恢复;所有其他数据库中的表都被忽略--include-databases=db1,db2
(或--include-databases=db1
--include-databases=db2
)只有数据库 db1
和db2
中的表被恢复;所有其他数据库中的表都被忽略--include-tables=db1.t1
只有数据库 db1
中的表t1
被恢复;数据库db1
中的其他表和所有其他数据库中的表都被忽略--include-tables=db1.t2,db2.t1
(或--include-tables=db1.t2
--include-tables=db2.t1
)只有数据库 db1
中的表t2
和数据库db2
中的表t1
被恢复;数据库db1
、db2
和所有其他数据库中的其他表都被忽略
您也可以一起使用这两个选项。例如,以下命令将恢复数据库
db1
和db2
中的所有表,以及数据库db3
中的表t1
和t2
(且不恢复其他数据库或表):$> ndb_restore [...] --include-databases=db1,db2 --include-tables=db3.t1,db3.t2
(我们在示例中省略了其他可能需要的选项。)
也可以不使用
--include-*
选项(或--exclude-*
选项),使用以下语法来恢复所选数据库或单个数据库中的所选表:ndb_restore other_options db_name,[db_name[,...] | tbl_name[,tbl_name][,...]]
换言之,您可以指定以下内容以进行恢复:
-
一个或多个数据库中的所有表
-
单个数据库中的一个或多个表
-
-
Command-Line Format --lines-terminated-by=字符
Type 字符串 Default Value \n (换行符)
指定每行输出的结尾字符串。默认是一个换行符 (
\n
)。 -
Command-Line Format --login-path=path
Type 字符串 Default Value [none]
从登录文件中读取给定的路径。
-
Command-Line Format --no-login-paths
跳过从登录路径文件中读取选项。
-
Command-Line Format --lossy-conversions
该选项旨在补充
--promote-attributes
选项。使用--lossy-conversions
允许在从备份还原数据时进行损失转换(类型降级或符号更改)。除了少数例外,降级规则与 MySQL 复制相同;见 第 19.5.1.9.2 节,“复制具有不同数据类型的列”,了解当前支持的特定类型转换信息。该选项还允许将
NULL
列还原为NOT NULL
。该列不得包含任何NULL
条目;否则 ndb_restore 将停止并显示错误。ndb_restore 在损失转换期间执行的任何数据截断将被报告,每个属性和列一次。
-
Command-Line Format --no-binlog
该选项防止任何连接的 SQL 节点将由 ndb_restore 还原的数据写入到二进制日志中。
-
Command-Line Format --no-restore-disk-objects
该选项停止 ndb_restore 从还原 NDB 集群磁盘数据对象,例如表空间和日志文件组;见 第 25.6.11 节,“NDB 集群磁盘数据表”,了解这些对象的更多信息。
-
--no-upgrade
,-u
Command-Line Format --no-upgrade
使用 ndb_restore 还原备份时,使用旧固定格式创建的
VARCHAR
列将被调整大小并重新创建为现在使用的可变宽度格式。该行为可以通过指定--no-upgrade
来 override。 -
Command-Line Format --ndb-connectstring=connection_string
Type 字符串 Default Value [none]
设置连接字符串以连接到 ndb_mgmd。语法:
[nodeid=
。覆盖id
;][host=]hostname
[:port
]NDB_CONNECTSTRING
和my.cnf
中的条目。 -
Command-Line Format --ndb-mgm-tls=level
Type 枚举 Default Value relaxed
Valid Values relaxed
strict
设置连接到管理服务器所需的 TLS 支持级别;可以是
relaxed
或strict
。relaxed
(默认) 表示尝试 TLS 连接,但不要求成功:strict
表示需要 TLS 连接。 -
Command-Line Format --ndb-mgmd-host=connection_string
Type 字符串 Default Value [none]
与
--ndb-connectstring
相同。 -
--ndb-nodegroup-map
=map
,-z
Command-Line Format --ndb-nodegroup-map=map
任何设置的值将被忽略,该选项本身不执行任何操作。
-
Command-Line Format --ndb-nodeid=#
Type 整数 Default Value [none]
设置该节点的节点 ID,覆盖
--ndb-connectstring
设置的 ID。 -
--ndb-optimized-node-selection
Command-Line Format --ndb-optimized-node-selection
启用事务节点选择的优化。默认启用;使用
--skip-ndb-optimized-node-selection
禁用。 -
Command-Line Format --ndb-tls-search-path=list
Type 路径名称 Default Value (Unix) $HOME/ndb-tls
Default Value (Windows) $HOMEDIR/ndb-tls
指定要搜索 CA 文件的目录列表。在 Unix 平台上,目录名称以冒号 (
:
) 分隔;在 Windows 系统上,分号 (;
) 用作分隔符。目录引用可以是相对的或绝对的,可以包含一个或多个环境变量,每个变量以美元符号 ($
) 开头,并在使用前展开。搜索从左到右进行,直到找到文件。空字符串表示空搜索路径,导致所有搜索失败。点 (
.
) 表示当前工作目录的搜索路径。如果未提供搜索路径,将使用编译时的默认值。该值取决于平台:在 Windows 上为
\ndb-tls
;在其他平台(包括 Linux)上为$HOME/ndb-tls
。这可以通过使用-DWITH_NDB_TLS_SEARCH_PATH
编译 NDB Cluster 来覆盖。 -
Command-Line Format --no-defaults
不要从任何选项文件中读取默认选项,除了登录文件。
-
--nodeid
=#
,-n
Command-Line Format --nodeid=#
Type 数字 Default Value 无
指定备份所在的数据节点的节点 ID;必需。
当恢复到具有不同数量的数据节点的集群时,这些信息有助于确定要恢复到给定节点的正确文件集。(在这种情况下,通常需要将多个文件恢复到单个数据节点。)请参阅 恢复到不同数量的数据节点,以获取更多信息和示例。
-
Command-Line Format --num-slices=#
Type 整数 Default Value 1
Minimum Value 1
Maximum Value 1024
在通过切片恢复备份时,此选项设置备份的切片数。这允许多个 ndb_restore 实例并行恢复不相交的子集,可能减少恢复操作所需的时间。
一个 切片 是备份中的一组片段,具有相同的切片 ID,使用
--slice-id
选项指定。两个选项必须总是一起使用,--slice-id
的值必须总是小于切片数。ndb_restore 遇到片段并为每个片段分配一个片段计数器。当通过切片恢复时,一个切片 ID 将被分配给每个片段;该切片 ID 在 0 到小于切片数的范围内。对于不是
BLOB
表的表,该切片的所属是使用以下公式确定的:[slice_ID] = [fragment_counter] % [number_of_slices]
对于
BLOB
表,不使用片段计数器,而是使用片段号和BLOB
表的主表 ID(回忆一下,NDB
在内部将BLOB
值存储在单独的表中)。在这种情况下,片段的切片 ID 是使用以下公式计算的:[slice_ID] = ([main_table_ID] + [fragment_ID]) % [number_of_slices]
因此,使用
N
切片恢复意味着运行N
个 ndb_restore 实例,所有实例都具有--num-slices=
(以及任何其他必要的选项),并且每个实例都具有N
--slice-id=1
、--slice-id=2
、--slice-id=3
等,直到slice-id=
。N
-1示例。 假设您想恢复名为
BACKUP-1
的备份,位于每个数据节点的文件系统上的默认目录/var/lib/mysql-cluster/BACKUP/BACKUP-3
中,到具有四个数据节点的集群,节点 ID 分别为 1、2、3 和 4。要使用五个切片执行此操作,请执行以下命令集:-
使用 ndb_restore 恢复集群元数据,如下所示:
$> ndb_restore -b 1 -n 1 -m --disable-indexes --backup-path=/home/ndbuser/backups
-
使用 ndb_restore 恢复数据到数据节点,如下所示:
$> ndb_restore -b 1 -n 1 -r --num-slices=5 --slice-id=0 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 $> ndb_restore -b 1 -n 1 -r --num-slices=5 --slice-id=1 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 $> ndb_restore -b 1 -n 1 -r --num-slices=5 --slice-id=2 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 $> ndb_restore -b 1 -n 1 -r --num-slices=5 --slice-id=3 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 $> ndb_restore -b 1 -n 1 -r --num-slices=5 --slice-id=4 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 $> ndb_restore -b 1 -n 2 -r --num-slices=5 --slice-id=0 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 $> ndb_restore -b 1 -n 2 -r --num-slices=5 --slice-id=1 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 $> ndb_restore -b 1 -n 2 -r --num-slices=5 --slice-id=2 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 $> ndb_restore -b 1 -n 2 -r --num-slices=5 --slice-id=3 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 $> ndb_restore -b 1 -n 2 -r --num-slices=5 --slice-id=4 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 $> ndb_restore -b 1 -n 3 -r --num-slices=5 --slice-id=0 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 $> ndb_restore -b 1 -n 3 -r --num-slices=5 --slice-id=1 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 $> ndb_restore -b 1 -n 3 -r --num-slices=5 --slice-id=2 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 $> ndb_restore -b 1 -n 3 -r --num-slices=5 --slice-id=3 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 $> ndb_restore -b 1 -n 3 -r --num-slices=5 --slice-id=4 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 $> ndb_restore -b 1 -n 4 -r --num-slices=5 --slice-id=0 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 $> ndb_restore -b 1 -n 4 -r --num-slices=5 --slice-id=1 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 $> ndb_restore -b 1 -n 4 -r --num-slices=5 --slice-id=2 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 $> ndb_restore -b 1 -n 4 -r --num-slices=5 --slice-id=3 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 $> ndb_restore -b 1 -n 4 -r --num-slices=5 --slice-id=4 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1
所有这些命令都可以并行执行,前提是集群中有足够的连接槽位(请参阅
--backup-path
选项的描述)。 -
恢复索引,如下所示:
$> ndb_restore -b 1 -n 1 --rebuild-indexes --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1
-
最后,恢复 epoch,使用以下命令:
$> ndb_restore -b 1 -n 1 --restore-epoch --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1
您应该使用切片来恢复集群数据,只需要恢复元数据、索引或纪元信息,不需要使用
--num-slices
或--slice-id
选项。如果使用这些选项与ndb_restore控制恢复这些信息的选项,程序将忽略它们。使用
--parallelism
选项对恢复速度的影响独立于使用切片或使用多个ndb_restore实例的并行恢复(--parallelism
指定单个ndb_restore线程执行的并行事务数),但可以与这两者一起使用。您应该注意,增加--parallelism
将使ndb_restore对集群施加更大的负载;如果系统可以处理这种负载,恢复将完成得更快。值
--num-slices
不直接依赖于硬件相关的值,如CPU数量、CPU核心数量、RAM数量等,也不依赖于LDM的数量。可以在同一个恢复操作中,在不同的数据节点上使用不同的
--num-slices
值;这样做不会产生任何不良影响。 -
-
--parallelism
=#
,-p
Command-Line Format --parallelism=#
Type 数字 Default Value 128
Minimum Value 1
Maximum Value 1024
ndb_restore使用单行事务来并发应用多行。该参数确定ndb_restore实例尝试使用的并行事务数(并发行数)。默认值为128;最小值为1,最大值为1024。
执行插入操作的工作是并行化的,分布在参与的数据节点的线程中。这机制用于从
.Data
文件中恢复批量数据,即模糊快照的数据;它不用于构建或重建索引。更改日志是串行应用的;索引删除和构建是DDL操作,单独处理。客户端没有线程级并行性。 -
--preserve-trailing-spaces
,-P
Command-Line Format --preserve-trailing-spaces
使尾随空格在将固定宽度字符数据类型提升到可变宽度等效类型时被保留,即当提升
CHAR
列值到VARCHAR
时,或者提升BINARY
列值到VARBINARY
时。否则,这些列值中的尾随空格将在插入新列时被删除。 -
Command-Line Format --print
导致 ndb_restore 将所有数据、元数据和日志打印到
stdout
。相当于使用--print-data
、--print-meta
和--print-log
选项一起。Note使用
--print
或任何--print_*
选项实际上是执行一个干运行。包括一个或多个这些选项将输出重定向到stdout
;在这种情况下,ndb_restore 不会尝试恢复数据或元数据到 NDB 集群。 -
Command-Line Format --print-data
导致 ndb_restore 将其输出定向到
stdout
。通常与一个或多个--tab
、--fields-enclosed-by
、--fields-optionally-enclosed-by
、--fields-terminated-by
、--hex
和--append
一起使用。TEXT
和BLOB
列值总是被截断。这些值被截断到输出的前 256 字节中。这当前不能被覆盖当使用--print-data
。 -
Command-Line Format --print-defaults
打印程序参数列表并退出。
-
Command-Line Format --print-log
导致 ndb_restore 将其日志输出到
stdout
。 -
Command-Line Format --print-meta
将所有元数据打印到
stdout
。 -
Command-Line Format --print-sql-log
将 SQL 语句日志记录到
stdout
。使用该选项启用;通常情况下,该行为被禁用。该选项在尝试日志记录之前检查所有被还原的表是否都有明确定义的主键;无法将只有隐藏主键的表(由NDB
实现)转换为有效的 SQL。该选项不适用于具有
BLOB
列的表。 -
Command-Line Format --progress-frequency=#
Type 数字 Default Value 0
Minimum Value 0
Maximum Value 65535
每
N
秒打印一次状态报告,而备份正在进行中。0(默认)不打印状态报告。最大值为 65535。 -
Command-Line Format --promote-attributes
ndb_restore 支持有限的 属性提升,类似于 MySQL 复制所支持的那样;即,从某个类型的列备份的数据可以通常恢复到使用“larger, similar”类型的列中。例如,从
CHAR(20)
列备份的数据可以恢复到声明为VARCHAR(20)
、VARCHAR(30)
或CHAR(30)
的列中;从MEDIUMINT
列备份的数据可以恢复到类型为INT
或BIGINT
的列中。请参阅 第 19.5.1.9.2 节,“复制具有不同数据类型的列”,以获取当前支持的类型转换表。该选项还使得可以将
NOT NULL
列恢复为NULL
。属性提升必须在 ndb_restore 中明确启用,如下所示:
-
准备要还原的表。 ndb_restore 不能用来重新创建表具有不同的定义;这意味着您必须手动创建表,或者使用
ALTER TABLE
在还原表元数据后但在还原数据之前更改要提升的列。 -
使用 ndb_restore 时带有
--promote-attributes
选项(短形式-A
)来还原表数据。如果不使用该选项,属性提升将不会发生;相反,恢复操作将因错误而失败。
在将字符数据类型转换为
TEXT
或BLOB
时,只能在同一时间内将字符类型(CHAR
和VARCHAR
)和二进制类型(BINARY
和VARBINARY
)之间进行转换。例如,您不能在同一时间内将INT
列升级到BIGINT
,同时将VARCHAR
列升级到TEXT
在同一个 ndb_restore 调用中。不支持使用不同字符集的
TEXT
列之间的转换,并且明确禁止这样做。使用 ndb_restore 将字符或二进制类型转换为
TEXT
或BLOB
时,您可能会注意到它创建并使用一个或多个名为
的暂存表。这些表不再需要,并且通常由 ndb_restore 在成功恢复后删除。table_name
$STnode_id
-
-
Command-Line Format --rebuild-indexes
启用多线程重建有序索引,而不是在还原本机
NDB
备份时。使用 ndb_restore 的线程数由BuildIndexThreads
数据节点配置参数和 LDM 数量控制。只有在第一次运行 ndb_restore 时才需要使用此选项;这将导致所有有序索引被重建,而不需要再次使用
--rebuild-indexes
在恢复后续节点时。您应该在将新行插入数据库之前使用此选项;否则,在尝试重建索引时可能会出现唯一约束违规。有序索引的构建默认情况下是并行的,使用 LDM 数量。脱机索引构建在节点和系统重新启动期间可以使用
BuildIndexThreads
数据节点配置参数加速;该参数对 ndb_restore 的索引删除和重建没有影响。重新建立唯一索引使用磁盘写入带宽来记录redo日志和本地检查点。在这种情况下,如果磁盘写入带宽不足可能会导致redo缓冲区溢出或日志溢出错误。在这种情况下,您可以重新运行ndb_restore
--rebuild-indexes
;该过程将从错误发生的地方恢复。如果您遇到临时错误,也可以这样做。您可以无限次执行ndb_restore--rebuild-indexes
;您可能可以通过减少--parallelism
的值来停止这些错误。如果问题是磁盘空间不足,您可以增加redo日志的大小(FragmentLogFileSize
节点配置参数),或您可以增加LCP执行的速度(MaxDiskWriteSpeed
和相关参数),以便更快地释放空间。 -
--remap-column=
db
.tbl
.col
:fn
:args
Command-Line Format --remap-column=string
Type 字符串 Default Value [none]
当与
--restore-data
一起使用时,该选项将应用于指定列的值。参数字符串中的值列举如下:-
db
: 数据库名称,遵循--rewrite-database
的重命名。 -
tbl
: 表名称。 -
fn
: 函数名称;当前,唯一支持的名称是offset
。 -
args
: 传递给函数的参数。当前,仅支持单个参数,即要添加到offset
函数的偏移量大小。负值也是支持的。参数的大小不能超过列类型的有符号变体的大小;例如,如果col
是INT
列,那么传递给offset
函数的参数的允许范围是-2147483648
到2147483647
(见第 13.1.2 节,“整数类型(精确值)- INTEGER、INT、SMALLINT、TINYINT、MEDIUMINT、BIGINT”)。如果将偏移值应用于列会导致溢出或下溢出,恢复操作将失败。这可能发生在列是
BIGINT
,并且选项尝试将偏移值应用于行,其中列值为 4294967291,因为4294967291 + 8 = 4294967299 > 4294967295
。
当您希望将多个 NDB 集群实例(所有使用相同的 schema)中的数据合并到单个目标 NDB 集群中时,此选项非常有用,使用 NDB 本机备份(见 第 25.6.8.2 节,“使用 NDB 集群管理客户端创建备份”)和 ndb_restore 合并数据,其中主键和唯一键值在源集群之间重叠,需要在过程中重新映射这些值以避免重叠。也可能需要保留表之间的其他关系。为了满足这些要求,可以在同一个 ndb_restore 调用中多次使用该选项,以重新映射不同表的列,如下所示:
$> ndb_restore --restore-data --remap-column=hr.employee.id:offset:1000 \ --remap-column=hr.manager.id:offset:1000 --remap-column=hr.firstaiders.id:offset:1000
(这里没有显示其他选项。)
--remap-column
也可以用于更新同一表的多个列。不同的表和列的组合也是可能的。同一表的不同列也可以使用不同的偏移值,如下所示:$> ndb_restore --restore-data --remap-column=hr.employee.salary:offset:10000 \ --remap-column=hr.employee.hours:offset:-10
如果源备份包含不应合并的重复表,可以使用
--exclude-tables
、--exclude-databases
或在应用程序中使用其他方法来处理。可以使用
SHOW CREATE TABLE
、ndb_desc 工具和MAX()
、MIN()
、LAST_INSERT_ID()
等 MySQL 函数来获取要合并的表的结构和其他特征信息。不支持从合并表到未合并表或从未合并表到合并表的复制,在单独的 NDB 集群实例中。
-
-
--restore-data
,-r
Command-Line Format --restore-data
输出
NDB
表数据和日志。 -
--restore-epoch
,-e
Command-Line Format --restore-epoch
将 epoch 信息添加到集群复制状态表中。这对于在 NDB 集群副本上启动复制非常有用。当使用此选项时,如果已经存在 id 列为 0 的行,则更新该行;否则,插入该行。(见 第 25.7.9 节,“NDB 集群备份与 NDB 集群复制”。)
-
--restore-meta
,-m
Command-Line Format --restore-meta
该选项使 ndb_restore 打印
NDB
表元数据。第一次运行 ndb_restore 恢复程序时,也需要恢复元数据。换言之,必须重新创建数据库表—这可以通过运行带有
--restore-meta
(-m
) 选项的程序来实现。只需在单个数据节点上恢复元数据,这足以将其恢复到整个集群中。ndb_restore 使用目标集群的默认分区数,除非更改了原始集群数据节点的本地数据管理器线程数。
使用此选项时,建议禁用自动同步,方法是将
ndb_metadata_check=OFF
,直到 ndb_restore 完成元数据恢复,然后再将其打开,以同步新创建的 NDB 字典对象。Note在开始恢复备份时,集群数据库应为空。(换言之,在执行还原之前,应使用
--initial
启动数据节点。) -
Command-Line Format --restore-privilege-tables
Deprecated 是 不再使用。
-
--rewrite-database
=olddb,newdb
Command-Line Format --rewrite-database=string
Type 字符串 Default Value none
此选项使得可以将备份还原到名称不同的数据库中。例如,如果备份了一个名为
products
的数据库,可以使用此选项将其还原到一个名为inventory
的数据库,如下所示(省略其他可能需要的选项):$> ndb_restore --rewrite-database=product,inventory
可以在单个 ndb_restore 调用中多次使用此选项。因此,可以使用
--rewrite-database=db1,db2 --rewrite-database=db3,db4
同时从数据库db1
还原到数据库db2
,从数据库db3
还原到数据库db4
。其他 ndb_restore 选项可以在多个--rewrite-database
选项之间使用。如果出现多个
--rewrite-database
选项之间的冲突,则从左到右读取,最后一个--rewrite-database
选项生效。例如,如果使用--rewrite-database=db1,db2 --rewrite-database=db1,db3
,则只有--rewrite-database=db1,db3
生效,--rewrite-database=db1,db2
被忽略。也可以从多个数据库还原到一个数据库,例如--rewrite-database=db1,db3 --rewrite-database=db2,db3
将数据库db1
和db2
的所有表和数据还原到数据库db3
中。Important使用
--rewrite-database
从多个备份数据库还原到一个目标数据库时,不检查表或其他对象名称之间的冲突,也不保证行的恢复顺序。这意味着在这种情况下,可能会覆盖行并丢失更新。 -
Command-Line Format --skip-broken-objects
此选项使 ndb_restore 在读取本机 NDB 备份时忽略损坏的表,并继续还原剩余的表(不包括损坏的表)。目前,
--skip-broken-objects
选项仅在缺少 blob 部分表的情况下生效。 -
Command-Line Format --skip-table-check
可以在不恢复表元数据的情况下恢复数据。默认情况下,当执行此操作时,ndb_restore 如果发现表数据和表模式之间的不匹配,将出现错误;该选项覆盖该行为。
使用 ndb_restore 恢复数据时,某些列定义不匹配的限制被放松;当遇到这些类型的不匹配时,ndb_restore 不会停止并出现错误,而是接受数据并将其插入目标表,同时向用户发出警告,表明这是正在进行的操作。这行为无论是否使用选项
--skip-table-check
或--promote-attributes
。这些列定义的差异类型包括:-
不同的
COLUMN_FORMAT
设置 (FIXED
,DYNAMIC
,DEFAULT
) -
不同的
STORAGE
设置 (MEMORY
,DISK
) -
不同的默认值
-
不同的分布键设置
-
-
Command-Line Format --skip-unknown-objects
该选项使 ndb_restore 在读取本机
NDB
备份时忽略任何未知的模式对象。这可以用于从运行(例如)NDB 7.6 的集群恢复备份到运行 NDB Cluster 7.5 的集群。 -
Command-Line Format --slice-id=#
Type 整数 Default Value 0
Minimum Value 0
Maximum Value 1023
在通过切片恢复时,该选项是要恢复的切片的 ID。该选项总是与
--num-slices
一起使用,其值必须小于--num-slices
的值。有关更多信息,请参阅本节中的
--num-slices
描述。 -
--tab
=dir_name
,-T
dir_name
Command-Line Format --tab=path
Type 目录名 使
--print-data
创建一个dump文件,每个表一个,名称为
。它需要作为参数的目录路径,以保存文件;使用tbl_name
.txt.
表示当前目录。 -
Command-Line Format --timestamp-printouts{=true|false}
Type 布尔值 Default Value true
使信息、错误和调试日志消息带有时间戳。
该选项默认启用。使用
--timestamp-printouts=false
禁用它。 -
Command-Line Format --usage
显示帮助文本并退出;与
--help
相同。 -
Command-Line Format --verbose=#
Type 数字 Default Value 1
Minimum Value 0
Maximum Value 255
设置输出的详细级别。最小值为 0;最大值为 255。默认值为 1。
-
Command-Line Format --version
显示版本信息并退出。
-
Command-Line Format --with-apply-status
从备份的
ndb_apply_status
表中还原所有行(除了server_id = 0
的行,该行是使用--restore-epoch
生成的)。此选项需要同时使用--restore-data
。如果备份的
ndb_apply_status
表已经包含一个server_id = 0
的行,ndb_restore--with-apply-status
将删除它。因此,我们建议您在使用 ndb_restore--with-apply-status
选项后,使用 ndb_restore--restore-epoch
。您也可以同时使用--restore-epoch
和最后一个 ndb_restore--with-apply-status
选项来还原集群。有关更多信息,请参阅 ndb_apply_status 表。
该实用程序的典型选项如下所示:
ndb_restore [-c connection_string] -n node_id -b backup_id \
[-m] -r --backup-path=/path/to/backup/files
通常,在从 NDB 集群备份还原时,ndb_restore 至少需要 --nodeid
(短形式:-n
)、--backupid
(短形式:-b
)和 --backup-path
选项。
选项 -c
用于指定连接字符串,以告诉 ndb_restore
在哪里找到集群管理服务器(参阅 第 25.4.3.3 节,“NDB 集群连接字符串”)。如果不使用此选项,则 ndb_restore 将尝试连接到 localhost:1186 的管理服务器。此实用程序充当集群 API 节点,因此需要一个空闲的连接 “slot” 来连接到集群管理服务器。这意味着集群 config.ini
文件中必须至少有一个空闲的 [api]
或 [mysqld]
部分可供其使用(参阅 第 25.4.3.7 节,“在 NDB 集群中定义 SQL 和其他 API 节点”)。
ndb_restore 可以使用 --decrypt
和 --backup-password
解密加密的备份。两个选项都必须指定以执行解密。请参阅 START BACKUP
管理客户端命令的文档,以获取创建加密备份的信息。
您可以使用 ndb_restore 连接到集群的方式是使用 SHOW
命令在 ndb_mgm 管理客户端中。您也可以从系统 shell 中完成此操作,如下所示:
$> ndb_mgm -e "SHOW"
错误报告。 ndb_restore 报告临时和永久错误。在临时错误的情况下,它可能能够从中恢复,并报告 Restore successful, but encountered temporary error, please look at configuration
。
使用 ndb_restore 初始化 NDB 集群以用于循环复制后,在复制节点上的二进制日志不会自动创建,您必须手动创建它们。要创建二进制日志,请在该 SQL 节点上发出 SHOW TABLES
语句,然后运行 START REPLICA
。这是 NDB 集群中的已知问题。