ndb_restore-还原NDB群集备份
NDB群集还原程序是作为单独的命令行实用程序ndb_restore实施的,通常可以在MySQL bin
目录中找到该实用程序。该程序读取作为备份结果创建的文件,并将存储的信息插入数据库。
注意从NDB 8.0.17开始,该程序
NDBT_ProgramExit:...
在运行结束时不再打印。从NDB 8.0.16或更早版本升级到NDB 8.0更高版本时,应相应地修改依赖于此行为的应用程序。
ndb_restore必须执行一次为每个被创建的备份文件START BACKUP
来创建备份命令(见第22.5.3.2,“使用NDB群集管理客户端创建备份”)。这等于创建备份时集群中的数据节点数。
注意在使用ndb_restore之前,建议集群以单用户模式运行,除非要并行还原多个数据节点。有关更多信息,请参见“ NDB群集单用户模式”。
下表包括特定于NDB Cluster本机备份还原程序ndb_restore的选项。附加说明如下表。有关大多数NDB群集程序(包括ndb_restore)通用的选项,请参见“ NDB群集程序的通用选项— NDB群集程序的通用选项”。
ndb_restore程序的命令行选项
格式 | 描述 | 添加,不建议使用或删除 |
---|---|---|
| 允许更改构成表主键的列集 | 添加:NDB 8.0.21 |
| 将数据追加到制表符分隔的文件中 | (在所有基于MySQL 8.0的版本中受支持) |
| 备份文件目录的路径 | (在所有基于MySQL 8.0的版本中受支持) |
| 使用给定的ID从备份还原 | (在所有基于MySQL 8.0的版本中受支持) |
| --connectstring的别名 | (在所有基于MySQL 8.0的版本中受支持) |
| 使备份中的索引被忽略;可能会减少恢复数据所需的时间 | (在所有基于MySQL 8.0的版本中受支持) |
| 还原期间请勿忽略系统表。仅用于实验;非用于生产 | (在所有基于MySQL 8.0的版本中受支持) |
| 要排除的一个或多个数据库的列表(包括未命名的数据库) | (在所有基于MySQL 8.0的版本中受支持) |
| 如果为TRUE(默认值),则不要还原复制ALTER TABLE操作后剩下的任何中间表(名称以'#sql-'开头) | (在所有基于MySQL 8.0的版本中受支持) |
| 使表的备份版本中数据库中表版本中缺少的列被忽略 | (在所有基于MySQL 8.0的版本中受支持) |
| 导致忽略数据库中缺少的备份表 | (在所有基于MySQL 8.0的版本中受支持) |
| 一个或多个要排除的表的列表(包括同一数据库中未命名的表);每个表引用必须包含数据库名称 | (在所有基于MySQL 8.0的版本中受支持) |
| 字段用指示的字符括起来 | (在所有基于MySQL 8.0的版本中受支持) |
| 字段可选地包含指示的字符 | (在所有基于MySQL 8.0的版本中受支持) |
| 字段以指示的字符终止 | (在所有基于MySQL 8.0的版本中受支持) |
| 以十六进制格式打印二进制类型 | (在所有基于MySQL 8.0的版本中受支持) |
| 忽略包含对扩展主键中现在包含的列的更新的日志条目 | 添加:NDB 8.0.21 |
| 要还原的一个或多个数据库的列表(不包括未命名的数据库) | (在所有基于MySQL 8.0的版本中受支持) |
| 恢复共享用户并将其授予ndb_sql_metadata表 | 添加:NDB 8.0.19 |
| 要还原的一个或多个表的列表(不包括同一数据库中未命名的表);每个表引用必须包含数据库名称 | (在所有基于MySQL 8.0的版本中受支持) |
| 行以指示的字符终止 | (在所有基于MySQL 8.0的版本中受支持) |
| 从备份还原数据时,允许列值的有损转换(类型降级或符号更改) | (在所有基于MySQL 8.0的版本中受支持) |
| 如果已连接mysqld并使用二进制日志记录,请不要记录恢复的数据 | (在所有基于MySQL 8.0的版本中受支持) |
| 不要还原与磁盘数据有关的对象 | (在所有基于MySQL 8.0的版本中受支持) |
| 不要为尚未调整VAR数据大小的varsize属性升级数组类型,也不要更改列属性 | (在所有基于MySQL 8.0的版本中受支持) |
| NDBCLUSTER存储引擎的节点组映射。语法:(source_nodegroup,destination_nodegroup)的列表 | (在所有基于MySQL 8.0的版本中受支持) |
| 进行备份的节点的ID | (在所有基于MySQL 8.0的版本中受支持) |
| 按片还原时要应用的片数 | 添加:NDB 8.0.20 |
| 恢复数据时要使用的并行事务数 | (在所有基于MySQL 8.0的版本中受支持) |
| 将固定宽度的字符串类型升级为可变宽度的类型时,允许保留尾随空格(包括填充) | (在所有基于MySQL 8.0的版本中受支持) |
| 将元数据,数据和日志打印到标准输出(相当于--print-meta --print-data --print-log) | (在所有基于MySQL 8.0的版本中受支持) |
| 将数据打印到标准输出 | (在所有基于MySQL 8.0的版本中受支持) |
| 打印到标准输出 | (在所有基于MySQL 8.0的版本中受支持) |
| 将元数据打印到标准输出 | (在所有基于MySQL 8.0的版本中受支持) |
| 将SQL日志写入stdout;默认为FALSE | (在所有基于MySQL 8.0的版本中受支持) |
| 每给定秒数恢复的打印状态 | (在所有基于MySQL 8.0的版本中受支持) |
| 从备份还原数据时允许提升属性 | (在所有基于MySQL 8.0的版本中受支持) |
| 导致多线程重建在备份中找到的有序索引。通过设置BuildIndexThreads参数确定使用的线程数 | (在所有基于MySQL 8.0的版本中受支持) |
| 使用指示的函数和参数将偏移量应用于指定列的值 | 添加:NDB 8.0.21 |
| 使用NDB API将表数据还原并登录到NDB群集 | (在所有基于MySQL 8.0的版本中受支持) |
| 将纪元信息还原到状态表中。在MySQL Cluster复制从属服务器上方便进行复制。mysql.ndb_apply_status中ID为0的行将被更新/插入 | (在所有基于MySQL 8.0的版本中受支持) |
| 使用NDB API将元数据还原到NDB群集 | (在所有基于MySQL 8.0的版本中受支持) |
| 恢复先前移至NDB的MySQL特权表 | 弃用:NDB 8.0.16 |
| 还原到数据库名称与原始数据库不同 | (在所有基于MySQL 8.0的版本中受支持) |
| 导致备份文件中丢失的Blob表被忽略 | (在所有基于MySQL 8.0的版本中受支持) |
| 还原数据时跳过表结构检查 | (在所有基于MySQL 8.0的版本中受支持) |
| 将从较新的MySQL群集版本还原到较旧版本的备份时,将导致忽略ndb_restore无法识别的架构对象 | (在所有基于MySQL 8.0的版本中受支持) |
| 按切片还原时的切片ID | 添加:NDB 8.0.20 |
| 为给定路径中的每个表创建一个制表符分隔的.txt文件 | (在所有基于MySQL 8.0的版本中受支持) |
| 输出的详细程度 | (在所有基于MySQL 8.0的版本中受支持) |
此实用程序的典型选项如下所示:
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
选项。
在NDB 8.0.19之前,使用ndb_restore还原任何包含唯一索引的表时,必须包含--disable-indexes
或--rebuild-indexes
。从NDB 8.0.19开始,启用自动元数据同步后,就不再需要此功能。
该-c
选项用于指定一个连接字符串,该字符串指示ndb_restore
群集管理服务器的位置(请参见“ NDB群集连接字符串”)。如果未使用此选项,则ndb_restore尝试连接到上的管理服务器localhost:1186
。该实用程序充当集群API节点,因此需要一个空闲连接“插槽”以连接到集群管理服务器。这意味着,必须有至少一个[api]
或[mysqld]
这可以通过将其在集群中使用部分config.ini
文件。最好至少留一个空[api]
或[mysqld]
,因此config.ini
该部分未用于MySQL服务器或其他应用程序(请参见“在NDB群集中定义SQL和其他API节点”)。
您可以使用ndb_mgm管理客户端中的SHOW命令来验证ndb_restore是否已连接到群集。您也可以从系统外壳完成此操作,如下所示:
shell>ndb_mgm -e "SHOW"
可以在以下列表中找到有关ndb_restore使用的所有选项的更多详细信息:
--allow-pk-changes
属性 值 命令行格式 --allow-pk-changes[=0|1] 介绍了 8.0.21-ndb-8.0.21 类型 整数 默认值 0 最低值 0 最大值 1 当此选项设置为时
1
,ndb_restore允许表定义中的主键与备份中同一表的主键不同。当在一个或多个表上使用主键更改在不同模式版本之间进行备份和还原时,这可能是理想的,并且看起来与使用ndb_restore执行还原操作相比,ALTER TABLE
在还原表模式和数据之后发布许多语句更简单或更有效。主键定义的以下更改受以下支持
--allow-pk-changes
:扩展主键:备份的表模式中存在的不可为空的列成为数据库中表的主键的一部分。
重要
扩展表的主键时,在进行备份时,不得更新成为主键一部分的任何列;ndb_restore发现的任何此类更新都会导致还原操作失败,即使值没有发生变化也是如此。在某些情况下,可以使用
--ignore-extended-pk-updates
选项覆盖此行为。有关更多信息,请参见此选项的描述。- 收缩主键(1):在备份模式中已经属于表主键的列不再是主键的一部分,而是保留在表中。
- 收缩主键(2):已从表中完全删除了已成为备份模式中表主键一部分的列。
这些差异可以与ndb_restore支持的其他架构差异组合在一起,包括对blob和text列的更改,这些更改需要使用登台表。
此处列出了使用主键架构更改的典型方案中的基本步骤:
- 使用ndb_restore还原表架构
--restore-meta
- 将模式更改为所需的模式,或创建它
- 备份所需的架构
- 使用上一步的备份运行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
会导致删除该索引。)--append
属性 值 命令行格式 --append 与
--tab
和--print-data
选项一起使用时,这会导致将数据附加到任何具有相同名称的现有文件中。--backup-path
=dir_name
属性 值 命令行格式 --backup-path=dir_name 类型 目录名 默认值 ./ 备份目录的路径是必需的;使用选项将其提供给ndb_restore
--backup-path
,并且必须包括与要还原的备份的ID备份相对应的子目录。例如,如果数据节点DataDir
为/var/lib/mysql-cluster
,则备份目录为/var/lib/mysql-cluster/BACKUP
,并且ID为3的备份的备份文件可以在中找到/var/lib/mysql-cluster/BACKUP/BACKUP-3
。该路径可以是绝对路径,也可以是相对于ndb_restore可执行文件所在目录的路径,并且可以选择以前缀backup-path=
。可以使用与创建备份时不同的配置将备份还原到数据库。例如,假设与备份ID备份
12
,在集群中具有节点ID两个存储节点创建2
和3
,要恢复到群集具有四个节点。然后,必须对ndb_restore运行两次-对群集中进行备份的每个存储节点一次。但是,ndb_restore不能总是将运行一个MySQL版本的群集的备份还原到运行另一个MySQL版本的群集。重要
无法使用较旧版本的ndb_restore还原从较新版本的NDB Cluster创建的备份。您可以将更新版本的MySQL备份还原到较旧的群集,但是您必须使用更新版本的NDB Cluster 的ndb_restore副本。
例如,要恢复运行NDB簇7.5.17运行NDB簇27年7月4日的簇的簇采取集群备份,您必须使用ndb_restore自带的NDB簇7.5.17分布。
为了更快速地恢复,只要有足够数量的可用群集连接,就可以并行恢复数据。也就是说,在并行还原到多个节点时,必须在群集文件中为每个并发的ndb_restore进程提供一个
[api]
或[mysqld]
部分。但是,必须始终在日志之前应用数据文件。config.ini
--backupid
=#
,-b
属性 值 命令行格式 --backupid=# 类型 数字 默认值 none 此选项用于指定备份的ID或序列号,与管理客户端在备份完成时显示的消息中显示的编号相同。(请参见“NDB集群在线备份”。)
Backup backup_id completed
重要
还原群集备份时,必须确保从具有相同备份ID的备份中还原所有数据节点。使用来自不同备份的文件充其量只能将群集还原到不一致的状态,并且可能会完全失败。
在NDB 8.0.15和更高版本中,此选项是必需的。
--connect
,-c
属性 值 命令行格式 --connect 类型 string 默认值 localhost:1186 的别名
--ndb-connectstring
。--disable-indexes
属性 值 命令行格式 --disable-indexes 从本机
NDB
备份还原数据期间,禁用索引的还原。之后,您可以使用进行多线程索引构建,一次恢复所有表的索引--rebuild-indexes
,这比同时为大型表重建索引要快。--dont-ignore-systab-0
,-f
属性 值 命令行格式 --dont-ignore-systab-0 通常,还原表数据和元数据时,ndb_restore会忽略
NDB
备份中存在的系统表副本。--dont-ignore-systab-0
使系统表得以还原。此选项仅用于实验和开发用途,不建议在生产环境中使用。--exclude-databases
=db-list
属性 值 命令行格式 --exclude-databases=db-list 类型 string 默认值 用逗号分隔的一个或多个数据库列表,这些数据库不应还原。
此选项通常与
--exclude-tables
;结合使用。有关更多信息和示例,请参见该选项的描述。--exclude-intermediate-sql-tables[
=TRUE|FALSE]
属性 值 命令行格式 --exclude-intermediate-sql-tables[=TRUE|FALSE] 类型 布尔型 默认值 TRUE 在执行复制
ALTER TABLE
操作时,mysqld创建中间表(其名称以开头#sql-
)。如果为TRUE
,则该--exclude-intermediate-sql-tables
选项可防止ndb_restore恢复这些操作可能遗留下来的表。TRUE
默认情况下,此选项。--exclude-missing-columns
属性 值 命令行格式 --exclude-missing-columns 可以使用此选项仅还原选定的表列,这导致ndb_restore忽略与要在备份中找到的那些表的版本相比,要还原的表中缺少的任何列。此选项适用于所有要还原的表。如果您希望仅将此选项应用于选定的表或数据库,则可以将其与本节中其他地方所述的一个或多个
--include-*
或--exclude-*
选项结合使用,然后再使用其中的一组补充将数据恢复到其余表中。选项。--exclude-missing-tables
属性 值 命令行格式 --exclude-missing-tables 可以使用此选项仅还原选定的表,这会使ndb_restore忽略备份中目标数据库中未找到的任何表。
--exclude-tables
=table-list
属性 值 命令行格式 --exclude-tables=table-list 类型 string 默认值 一个或多个要排除的表的列表;每个表引用都必须包含数据库名称。通常与一起使用
--exclude-databases
。使用
--exclude-databases
或时--exclude-tables
,仅排除由该选项命名的数据库或表;所有其他数据库和表都由ndb_restore恢复。下表显示了对ndb_restore usng
--exclude-*
选项的多次调用(为清楚起见已省略了其他可能需要的选项),以及这些选项对从NDB群集备份还原的影响:使用--exclude-*选项对ndb_restore进行了多次调用,以及这些选项对从NDB群集备份还原的影响。
选项 结果 --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
中的所有表均已还原;db1
还原所有其他表;恢复所有其他数据库中的所有表--exclude-tables=db1.t2,db2.t1
(要么--exclude-tables=db1.t2
--exclude-tables=db2.t1)
数据库中 db1
除表之外的t2
所有表以及db2
除表外的数据库中的所有表t1
均已还原;没有其他表db1
或没有db2
被恢复;恢复所有其他数据库中的所有表您可以同时使用这两个选项。例如,由以下原因引起所有数据库中的所有表除了数据库
db1
和db2
,和表t1
和t2
数据库db3
,要恢复:shell>
ndb_restore [...] --exclude-databases=db1,db2 --exclude-tables=db3.t1,db3.t2(同样,为了清楚和简洁起见,我们从刚刚显示的示例中省略了其他可能必要的选择。)
根据以下规则,可以一起使用
--include-*
和--exclude-*
选项。- all
--include-*
和--exclude-*
options的操作是累积的。 - 全部
--include-*
和--exclude-*
选项按从右到左传递给ndb_restore的顺序进行评估。 - 如果选项冲突,则第一个(最右边)选项优先。换句话说,与给定数据库或表“ wins ”匹配的第一个选项(从右到左)。
例如,以下一组选项使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
- all
--fields-enclosed-by
=char
属性 值 命令行格式 --fields-enclosed-by=char 类型 string 默认值 每个列值都包含在传递给此选项的字符串中(与数据类型无关;请参见的描述
--fields-optionally-enclosed-by
)。--fields-optionally-enclosed-by
属性 值 命令行格式 --fields-optionally-enclosed-by 类型 string 默认值 传递给该选项的字符串用于包含字符数据的封装列值(如
CHAR
,VARCHAR
,BINARY
,TEXT
,或ENUM
)。--fields-terminated-by
=char
属性 值 命令行格式 --fields-terminated-by=char 类型 string 默认值 \t(tab) 传递给此选项的字符串用于分隔列值。默认值为制表符(
\t
)。--hex
属性 值 命令行格式 --hex 如果使用此选项,则所有二进制值均以十六进制格式输出。
--ignore-extended-pk-updates
属性 值 命令行格式 --ignore-extended-pk-updates[=0|1] 介绍了 8.0.21-ndb-8.0.21 类型 整数 默认值 0 最低值 0 最大值 1 使用时
--allow-pk-changes
,在进行备份时不得更新成为表主键一部分的列。此类列应在插入值之后一直保持相同的值,直到删除包含这些值的行为止。如果还原备份时ndb_restore遇到这些列的更新,则还原失败。由于某些应用程序可能在更新行时为所有列设置值,即使某些列值未更改,备份也可能包含日志事件,似乎是在更新实际上未修改的列。在这种情况下,您可以设置--ignore-extended-pk-updates
为1
,迫使ndb_restore忽略此类更新。重要
当导致忽略这些更新时,用户有责任确保没有任何更新成为主键一部分的列的值。
有关更多信息,请参见
--allow-pk-changes
。--include-databases
=db-list
属性 值 命令行格式 --include-databases=db-list 类型 string 默认值 以逗号分隔的要还原的一个或多个数据库的列表。常与
--include-tables
;有关更多信息和示例,请参见该选项的描述。--include-stored-grants
属性 值 命令行格式 --include-stored-grants 介绍了 8.0.19-ndb-8.0.19 类型 布尔型 默认值 FALSE 在NDB 8.0.19和更高版本中,默认情况下,ndb_restore不会将共享用户和授权(请参见“使用NDB_STORED_USER的分布式MySQL特权”)还原到
ndb_sql_metadata
表中。指定此选项会使它这样做。--include-tables
=table-list
属性 值 命令行格式 --include-tables=table-list 类型 string 默认值 以逗号分隔的表列表;每个表引用都必须包含数据库名称。
使用
--include-databases
或时--include-tables
,仅还原由该选项命名的数据库或表。所有其他数据库和表都被ndb_restore排除,并且不会还原。下表显示了使用选项对ndb_restore的几次调用
--include-*
(为清晰起见,可能省略了其他可能的选项),以及这些对从NDB群集备份还原的影响:使用--include-*选项对ndb_restore的几次调用及其对从NDB群集备份还原的影响。
选项 结果 --include-databases=db1 仅 db1
还原数据库中的表;所有其他数据库中的所有表都将被忽略--include-databases=db1,db2
(或--include-databases=db1
--include-databases=db2
)仅数据库 db1
和db2
中的表被恢复;所有其他数据库中的所有表都将被忽略--include-tables=db1.t1 只还原 t1
数据库中的表db1
;没有db1
还原任何其他数据库中或任何其他数据库中的表--include-tables=db1.t2,db2.t1
(或--include-tables=db1.t2
--include-tables=db2.t1
)只有表 t2
数据库db1
和表t1
数据库db2
恢复;没有其它表db1
,db2
或任何其它数据库被恢复您也可以一起使用这两个选项。例如,以下操作导致数据库
db1
和中的所有表以及db2
表t1
和t2
数据库中的所有表db3
(而不是其他数据库或表)被还原:shell>
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][,...]]
换句话说,您可以指定以下任一要还原的内容:
- 来自一个或多个数据库的所有表
- 单个数据库中的一个或多个表
--lines-terminated-by
=char
属性 值 命令行格式 --lines-terminated-by=char 类型 string 默认值 \n(linebreak) 指定用于结束输出的每一行的字符串。默认值为换行符(
\n
)。--lossy-conversions
,-L
属性 值 命令行格式 --lossy-conversions 类型 布尔型 默认值 FALSE
(如果未使用该选项)此选项旨在补充该
--promote-attributes
选项。--lossy-conversions
从备份还原数据时,使用允许列值的有损转换(类型降级或符号更改)。除某些例外,降级的规则与MySQL复制的规则相同。有关属性降级当前支持的特定类型转换的信息,请参见“具有不同数据类型的列的复制”。ndb_restore报告每个属性和列一次在有损转换期间执行的任何数据截断。
--no-binlog
属性 值 命令行格式 --no-binlog 此选项可防止任何连接的SQL节点将通过ndb_restore恢复的数据写入其二进制日志。
--no-restore-disk-objects
,-d
属性 值 命令行格式 --no-restore-disk-objects 类型 布尔型 默认值 FALSE 此选项使ndb_restore停止还原任何NDB群集磁盘数据对象,例如表空间和日志文件组。有关这些的更多信息,请参见“ NDB群集磁盘数据表”。
--no-upgrade
,-u
属性 值 命令行格式 --no-upgrade 当使用ndb_restore还原备份时,
VARCHAR
使用旧的固定格式创建的列将调整大小,并使用现在采用的可变宽度格式重新创建。可以通过指定来覆盖此行为--no-upgrade
。--ndb-nodegroup-map
=map
,-z
属性 值 命令行格式 --ndb-nodegroup-map=map 此选项可用于将备份从一个节点组还原到另一节点组。它的参数是表单的列表。
source_node_group,target_node_group
--nodeid
=#
,-n
属性 值 命令行格式 --nodeid=# 类型 数字 默认值 none 指定在其上进行备份的数据节点的节点ID。
当还原到具有与进行备份的数据节点数量不同的数据节点数的群集时,此信息有助于识别要还原到给定节点的一组正确的文件。(在这种情况下,通常需要将多个文件还原到单个数据节点。)有关其他信息和示例,
在NDB 8.0.15和更高版本中,此选项是必需的。
--num-slices
=#
属性 值 命令行格式 --num-slices=# 介绍了 8.0.20-ndb-8.0.20 类型 整数 默认值 1 最低值 1 最大值 1024 当按片还原备份时,此选项设置将备份分成的片数。这允许ndb_restore的多个实例并行还原不相交的子集,从而有可能减少执行还原操作所需的时间。
甲切片是在给定的备份中的数据的子集;也就是说,它是使用
--slice-id
选项指定的,具有相同分片ID的一组片段。这两个选项必须始终一起使用,并且by设置的值--slice-id
必须始终小于切片数。ndb_restore遇到碎片,并为每个碎片分配一个碎片计数器。在按片还原时,将片ID分配给每个片段。切片ID的范围比切片数少0到1。对于不是
BLOB
表的表,给定片段所属的切片使用以下所示公式确定:[slice_ID] = [fragment_counter] % [number_of_slices]
对于
BLOB
表,不使用片段计数器;而是使用片段号以及该表的主表IDBLOB
(在内部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还原集群元数据:
shell>
ndb_restore -b 1 -n 1 -m --disable-indexes --backup-path=/home/ndbuser/backups将集群数据还原到调用ndb_restore的数据节点,如下所示:
shell>
ndb_restore -b 1 -n 1 -r --num-slices=5 --slice-id=0 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 shell>ndb_restore -b 1 -n 1 -r --num-slices=5 --slice-id=1 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 shell>ndb_restore -b 1 -n 1 -r --num-slices=5 --slice-id=2 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 shell>ndb_restore -b 1 -n 1 -r --num-slices=5 --slice-id=3 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 shell>ndb_restore -b 1 -n 1 -r --num-slices=5 --slice-id=4 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 shell>ndb_restore -b 1 -n 2 -r --num-slices=5 --slice-id=0 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 shell>ndb_restore -b 1 -n 2 -r --num-slices=5 --slice-id=1 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 shell>ndb_restore -b 1 -n 2 -r --num-slices=5 --slice-id=2 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 shell>ndb_restore -b 1 -n 2 -r --num-slices=5 --slice-id=3 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 shell>ndb_restore -b 1 -n 2 -r --num-slices=5 --slice-id=4 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 shell>ndb_restore -b 1 -n 3 -r --num-slices=5 --slice-id=0 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 shell>ndb_restore -b 1 -n 3 -r --num-slices=5 --slice-id=1 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 shell>ndb_restore -b 1 -n 3 -r --num-slices=5 --slice-id=2 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 shell>ndb_restore -b 1 -n 3 -r --num-slices=5 --slice-id=3 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 shell>ndb_restore -b 1 -n 3 -r --num-slices=5 --slice-id=4 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 shell>ndb_restore -b 1 -n 4 -r --num-slices=5 --slice-id=0 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 shell>ndb_restore -b 1 -n 4 -r --num-slices=5 --slice-id=1 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 shell>ndb_restore -b 1 -n 4 -r --num-slices=5 --slice-id=2 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 shell>ndb_restore -b 1 -n 4 -r --num-slices=5 --slice-id=3 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1 shell>ndb_restore -b 1 -n 4 -r --num-slices=5 --slice-id=4 --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1只要有足够的插槽用于连接集群,就可以并行执行此步骤中所示的所有命令(请参阅
--backup-path
选项说明)。像往常一样还原索引,如下所示:
shell>
ndb_restore -b 1 -n 1 --rebuild-indexes --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1最后,使用此处显示的命令还原纪元:
shell>
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的数量。作为同一恢复的一部分,可以在不同的数据节点上为此选项采用不同的值。这样做本身不会产生任何不良影响。
--parallelism
=#
,-p
属性 值 命令行格式 --parallelism=# 类型 数字 默认值 128 最低值 1 最大值 1024 ndb_restore使用单行事务来同时应用许多行。此参数确定 ndb_restore实例尝试使用的并行事务(并行行)的数量。默认情况下是128;最小值为1,最大值为1024。
执行插入的工作跨相关数据节点中的线程并行进行。该机制用于从
.Data
文件中还原批量数据,即数据的模糊快照。它不用于构建或重建索引。更改日志是串行应用的;索引删除和构建是DDL操作,并分别处理。还原的客户端上没有线程级并行性。--preserve-trailing-spaces
,-P
属性 值 命令行格式 --preserve-trailing-spaces 当将固定宽度字符数据类型提升为等宽宽度时(即,将
CHAR
列值提升为VARCHAR
或将BINARY
列值提升为时),导致保留尾随空格VARBINARY
。否则,当将任何尾随空格插入到新列中时,它们将从这些列值中删除。注意
虽然可以促进
CHAR
以列VARCHAR
和BINARY
列VARBINARY
,你不能提升VARCHAR
到列CHAR
或VARBINARY
列BINARY
。--print
属性 值 命令行格式 --print 类型 布尔型 默认值 FALSE 使ndb_restore将所有数据,元数据和日志打印到
stdout
。相当于用--print-data
,--print-meta
和--print-log
选择在一起。注意
使用
--print
或任何--print_*
选项实际上是在进行空运行。包含这些选项中的一个或多个会导致将任何输出重定向到stdout
;在这种情况下,ndb_restore不会尝试将数据或元数据还原到NDB群集。--print-data
属性 值 命令行格式 --print-data 类型 布尔型 默认值 FALSE 使ndb_restore将其输出定向到
stdout
。常与一个或多个一起使用--tab
,--fields-enclosed-by
,--fields-optionally-enclosed-by
,--fields-terminated-by
,--hex
,和--append
。TEXT
和BLOB
列值始终被截断。这些值将被截断为输出中的前256个字节。使用时,当前不能覆盖此设置--print-data
。--print-log
属性 值 命令行格式 --print-log 类型 布尔型 默认值 FALSE 使ndb_restore将其日志输出到
stdout
。--print-meta
属性 值 命令行格式 --print-meta 类型 布尔型 默认值 FALSE 将所有元数据打印到
stdout
。print-sql-log
属性 值 命令行格式 --print-sql-log 类型 布尔型 默认值 FALSE 将SQL语句记录到
stdout
。使用该选项启用;通常,此行为是禁用的。该选项在尝试记录之前将检查所有要还原的表是否具有显式定义的主键。对仅由实现的隐藏主键的表进行的查询NDB
无法转换为有效的SQL。此选项不适用于具有
BLOB
列的表。--progress-frequency
=N
属性 值 命令行格式 --progress-frequency=# 类型 数字 默认值 0 最低值 0 最大值 65535 N
在备份进行过程中,每秒钟打印一次状态报告。0(默认值)将导致不打印任何状态报告。最大值为65535。--promote-attributes
,-A
属性 值 命令行格式 --promote-attributes ndb_restore与MySQL复制所支持的方式几乎一样,支持有限的属性提升。也就是说,从给定类型的列备份的数据通常可以使用“更大,相似”的类型恢复到列。例如,从数据
CHAR(20)
列可以被恢复到列声明为VARCHAR(20)
,VARCHAR(30)
,或CHAR(30)
;MEDIUMINT
列中的数据可以恢复为类型为INT
或的列BIGINT
。请参见“具有不同数据类型的列的复制”,用于属性升级当前支持的类型转换表。必须显式启用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进行转换时,您可能会注意到它创建并使用了一个或多个名为的登台表。这些表随后不再需要,通常在成功还原后由ndb_restore删除。table_name$STnode_id
- 准备要将备份还原到的表。ndb_restore不能用于重新创建具有与原始定义不同的表。这意味着您必须
--rebuild-indexes
属性 值 命令行格式 --rebuild-indexes 在还原本机
NDB
备份时,启用有序索引的多线程重建。ndb_restore使用此选项用于构建有序索引的线程数由BuildIndexThreads
数据节点配置参数和LDM数控制。仅在第一次运行ndb_restore时才需要使用此选项;这将导致
--rebuild-indexes
在还原后续节点时无需重新使用即可重建所有有序索引。在将新行插入数据库之前,应使用此选项。否则,可能会插入一行,稍后在尝试重建索引时会导致唯一约束冲突。默认情况下,有序索引的建立与LDM的数量并行。使用
BuildIndexThreads
数据节点配置参数可以使在节点和系统重新启动期间执行的脱机索引构建更快。此参数对ndb_restore删除和重建索引无效,该操作是在线执行的。重建唯一索引使用磁盘写入带宽进行重做日志记录和本地检查点。该带宽不足会导致重做缓冲区过载或日志过载错误。在这种情况下,您可以再次运行ndb_restore
--rebuild-indexes
。该过程在发生错误的地方恢复。遇到临时错误时,您也可以这样做。您可以无限期重复执行ndb_restore--rebuild-indexes
;您可以通过减小的值来停止此类错误--parallelism
。如果问题是空间不足,则可以增加重做日志的大小(FragmentLogFileSize
节点配置参数),或者您可以提高执行LCP(MaxDiskWriteSpeed
和相关参数)的速度,以便更快地释放空间。--remap-column=
db
.tbl
.col
:fn
:args
属性 值 命令行格式 --remap-column=[db].[tbl].[col]:[fn]:[args] 介绍了 8.0.21-ndb-8.0.21 类型 string 默认值 [none] 与一起使用时
--restore-data
,此选项将功能应用于所指示列的值。参数字符串中的值在此处列出:db
:数据库名称,后跟由进行的任何重命名--rewrite-database
。tbl
:表名。col
:要更新的列的名称。此列必须是整数类型之一TINYINT
,SMALLINT
,MEDIUMINT
,BIGINT
,或INT
(INTEGER
)。fn
:函数名称;目前,唯一支持的名称是offset
。args
:提供给函数的参数。当前,仅支持一个参数,即offset
函数要添加的偏移量的大小。支持负值。参数的大小不能超过该列类型的带符号变体的大小;例如,如果col
是一MEDIUMINT
列,则传递给offset
函数的参数的允许范围是-8388608
to-8388607
(请参见“整数类型(精确值)-INTEGER,INT,SMALLINT,TINYINT,MEDIUMINT,BIGINT”)。如果将偏移值应用于列将导致上溢或下溢,则还原操作将失败。例如,如果列为a
TINYINT
,并且该选项尝试将偏移值8应用于列值为125的行,则可能会发生这种情况,因为125 + 8 = 133 > 127
。
当您希望使用NDB本机备份将存储在NDB群集的多个源实例(全部使用相同的架构)中的数据合并到单个目标NDB群集中时,此选项很有用(请参见“NDB群集的管理”)客户端创建备份”)和ndb_restore合并数据,其中主键值和唯一键值在源群集之间重叠,并且作为该过程的一部分,有必要将这些值重新映射到不重叠的范围。可能还需要保留表之间的其他关系。为了满足这些要求,可以在同一个ndb_restore调用中多次使用该选项来重新映射不同表的列,如下所示:
shell>
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
也可以用于更新同一表的多个列。多个表和列的组合是可能的。相同表的不同列也可以使用不同的偏移量值,如下所示:shell>
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 Cluster的单独实例中复制从合并表到未合并表或从未合并表到合并表的复制。
--restore-data
,-r
属性 值 命令行格式 --restore-data 类型 布尔型 默认值 FALSE 输出
NDB
表数据和日志。--restore-epoch
,-e
属性 值 命令行格式 --restore-epoch 将(或还原)时期信息添加到群集复制状态表。这对于在NDB群集复制从属服务器上启动复制很有用。使用此选项时,如果该列中的
mysql.ndb_apply_status
hasrow0
中的id
行已经存在,则更新该行;如果尚不存在这样的行,则将其插入。(请参见“具有NDB群集复制的NDB群集备份”。)--restore-meta
,-m
属性 值 命令行格式 --restore-meta 类型 布尔型 默认值 FALSE 此选项使ndb_restore打印
NDB
表元数据。首次运行ndb_restore还原程序时,还需要还原元数据。换句话说,您必须重新创建数据库表-这可以通过使用
--restore-meta
(-m
)选项运行它来完成。恢复元数据仅需要在单个数据节点上完成;这足以将其还原到整个群集。在旧版本的NDB群集中,使用此选项还原其架构的表使用的分区数量与在原始群集上使用的分区数量相同,即使其数据节点的数量与新群集的数量不同也是如此。在NDB 8.0中,还原元数据时,这不再是问题。ndb_restore现在使用目标集群的默认分区数,除非本地数据管理器线程的数量也与原始集群中数据节点的数量有所变化。
在NDB 8.0.16或更高版本中使用此选项时,建议禁用自动同步,方法是进行设置,
ndb_metadata_check=OFF
直到ndb_restore完成恢复元数据为止,此后它可以再次打开以同步在NDB词典中新创建的对象。注意
开始还原备份时,群集应具有一个空数据库。(换句话说,
--initial
在执行还原之前,应使用来启动数据节点。)--restore-privilege-tables
属性 值 命令行格式 --restore-privilege-tables 不推荐使用 8.0.16-ndb-8.0.16 类型 布尔型 默认值 FALSE
(如果未使用该选项)默认情况下, ndb_restore不会还原在8.0版之前的NDB Cluster发行版中创建的分布式MySQL特权表,该表不支持NDB 7.6和更早版本中实现的分布式特权。此选项使 ndb_restore还原它们。
在NDB 8.0.16和更高版本中,此类表不用于访问控制;请参见表。作为MySQL服务器升级过程的一部分,服务器将在
InnoDB
本地创建这些表的副本。有关更多信息,请参见“升级和降级NDB群集”以及“授权表”。--rewrite-database
=olddb,newdb
属性 值 命令行格式 --rewrite-database=olddb,newdb 类型 string 默认值 none 使用此选项可以还原到名称与备份中使用的名称不同的数据库。例如,如果备份由名为的数据库组成
products
,则可以将其包含的数据还原到名为的数据库中inventory
,如此处所示使用此选项(忽略任何可能需要的其他选项):shell>
ndb_restore --rewrite-database=product,inventory该选项可以在ndb_restore的单次调用中多次使用。因此,可以同时从名为
db1
的数据库还原到名为的数据库,db2
以及从命名db3
为db4
使用命名的数据库--rewrite-database=db1,db2 --rewrite-database=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
。重要
使用时,从多个备份数据库还原到单个目标数据库时
--rewrite-database
,将不检查表名或其他对象名之间的冲突,并且不能保证还原行的顺序。这意味着在这种情况下可能会覆盖行并丢失更新。--skip-broken-objects
属性 值 命令行格式 --skip-broken-objects 此选项使ndb_restore在读取本机
NDB
备份时忽略损坏的表,并继续还原所有剩余的表(也未损坏的表)。当前,该--skip-broken-objects
选项仅在缺少斑点零件表的情况下有效。--skip-table-check
,-s
属性 值 命令行格式 --skip-table-check 可以在不还原表元数据的情况下还原数据。缺省情况下,执行此操作时,如果在表数据和表模式之间发现不匹配,则ndb_restore会失败并显示错误;此选项将覆盖该行为。
使用ndb_restore还原数据时,某些列定义不匹配的限制已得到放松;当遇到这些类型的不匹配之一时,ndb_restore不会像以前那样出现错误而停止,而是接受数据并将其插入目标表中,同时向用户发出警告,指出这样做已完成。出现这种行为是否属于任一选项
--skip-table-check
或--promote-attributes
正在使用中。列定义中的这些差异具有以下类型:- 不同的
COLUMN_FORMAT
设置(FIXED
,DYNAMIC
,DEFAULT
) - 不同的
STORAGE
设定(MEMORY
,DISK
) - 不同的默认值
- 不同的分配键设置
- 不同的
--skip-unknown-objects
属性 值 命令行格式 --skip-unknown-objects 此选项使ndb_restore忽略在读取本机
NDB
备份时无法识别的任何架构对象。这可用于将备份从运行NDB 7.6的群集复制到运行NDB 7.5的群集。--slice-id
=#
属性 值 命令行格式 --slice-id=# 介绍了 8.0.20-ndb-8.0.20 类型 整数 默认值 0 最低值 0 最大值 1023 按片还原时,这是要还原的片的ID。此选项始终与一起使用
--num-slices
,其值必须始终小于的值--num-slices
。有关更多信息,请参见
--num-slices
本节中其他地方的描述。--tab
=dir_name
,-T
dir_name
属性 值 命令行格式 --tab=dir_name 类型 目录名 导致
--print-data
创建转储文件,每个表一个,每个命名为tbl_name.txt
。它要求将文件保存目录的路径作为参数。使用.
当前目录。--verbose
=#
属性 值 命令行格式 --verbose=# 类型 数字 默认值 1 最低值 0 最大值 255 设置输出详细程度。最小值为0;最小值为0。最大值为255。默认值为1。
错误报告。ndb_restore报告临时错误和永久错误。如果是临时错误,它可能可以从中恢复,并Restore successful, but encountered temporary error, please look at configuration
在这种情况下进行报告。
重要使用ndb_restore初始化用于循环复制的NDB群集后,不会自动在充当复制从属的SQL节点上创建二进制日志,并且必须使它们手动创建。要创建二进制日志,请
SHOW TABLES
在运行之前在该SQL节点上发出一条语句START SLAVE
。这是NDB群集中的一个已知问题。
将备份还原到以前版本的NDB Cluster。由于使用了较早版本中不存在的功能,将备份从较新版本的NDB Cluster还原到较早版本时,您可能会遇到问题。例如,默认情况下在NDB 8.0中创建的表使用utf8mb4_ai_ci
字符集,而该字符集在NDB 7.6和更早版本中不可用,因此ndb_restore二进制文件无法从这些较早版本之一读取该字符集。
恢复到不同数量的数据节点
可以从NDB备份还原到具有与原始备份不同的数据节点数的群集。以下两节分别讨论目标群集具有比备份源更少或更多数据节点的情况。
恢复到比原始节点少的节点
如果节点数量较大,则可以还原到数据节点数量少于原始节点的群集。在以下示例中,我们使用在具有四个数据节点的群集上备份到具有两个数据节点的群集上的备份。
原始群集的管理服务器在主机上
host10
。原始群集具有四个数据节点,其节点ID和主机名显示在以下从管理服务器config.ini
文件中摘录的位置:[ndbd]NodeId=2 HostName=host2 [ndbd] NodeId=4 HostName=host4 [ndbd] NodeId=6 HostName=host6 [ndbd] NodeId=8 HostName=host8
我们假定每个数据节点最初都是以ndbmtd
--ndb-connectstring=host10
或等效名称开头的。- 以正常方式执行备份。有关如何执行此操作的信息,请参见“NDB集群在线备份”。
此处列出了备份在每个数据节点上创建的文件,其中
N
是节点ID,B
是备份ID。BACKUP-B-0.N.Data
BACKUP-B.N.ctl
BACKUP-B.N.log
这些文件位于每个数据节点上的下方。对于本示例的其余部分,我们假定备份ID为1。
BackupDataDir
/BACKUP/BACKUP-B
使所有这些文件可用于以后复制到新的数据节点(可以在其中通过ndb_restore在数据节点的本地文件系统上访问它们)。将它们全部复制到一个位置是最简单的。我们假设这就是您所做的。
目标集群的管理服务器位于host上
host20
,并且目标具有两个数据节点,其中显示了来自节点上的管理服务器config.ini
文件的节点ID和主机名host20
:[ndbd] NodeId=3 hostname=host3 [ndbd] NodeId=5 hostname=host5
每个数据节点进程都在ndbmtd上启动,
host3
并host5
应以ndbmtd-c host20
--initial
或等效进程启动,以便新的(目标)群集从干净的数据节点文件系统开始。将两组不同的两个备份文件复制到每个目标数据节点。对于此示例,将备份文件从节点2和4从原始群集复制到目标群集中的节点3。这些文件在这里列出:
BACKUP-1-0.2.Data
BACKUP-1.2.ctl
BACKUP-1.2.log
BACKUP-1-0.6.Data
BACKUP-1.6.ctl
BACKUP-1.6.log
然后将备份文件从节点6和8复制到节点5。这些文件显示在以下列表中:
BACKUP-1-0.4.Data
BACKUP-1.4.ctl
BACKUP-1.4.log
BACKUP-1-0.8.Data
BACKUP-1.8.ctl
BACKUP-1.8.log
在此示例的其余部分中,我们假定相应的备份文件已保存到
/BACKUP-1
节点3和5的每个节点上的目录中。在两个目标数据节点的每个节点上,必须从两组备份中还原。首先,通过调用ndb_restore on 将备份从节点2和4还原到节点3,
host3
如下所示:shell>
ndb_restore -c host20 --nodeid=2 --backupid=1 --restore-data --backup-path=/BACKUP-1 shell>ndb_restore -c host20 --nodeid=4 --backupid=1 --restore-data --backup-path=/BACKUP-1然后通过调用on上的ndb_restore将备份从节点6和8还原到节点5
host5
,如下所示:shell>
ndb_restore -c host20 --nodeid=6 --backupid=1 --restore-data --backup-path=/BACKUP-1 shell>ndb_restore -c host20 --nodeid=8 --backupid=1 --restore-data --backup-path=/BACKUP-1
恢复到比原始节点更多的节点
为给定的ndb_restore命令指定的节点ID 是原始备份中节点的ID,而不是将其还原到的数据节点的ID 。使用本节中描述的方法执行备份时,ndb_restore连接到管理服务器并获取要备份到的群集中的数据节点列表。还原的数据将相应地进行分配,因此在执行备份时无需知道或计算目标群集中的节点数。
注意更改每个节点组的LCP线程或LQH线程的总数时,应从使用mysqldump创建的备份中重新创建模式。
创建数据备份。您可以通过从系统外壳调用 ndb_mgm客户
START BACKUP
命令来做到这一点,如下所示:shell>
ndb_mgm -e "START BACKUP 1"假定所需的备份ID为1。
创建架构的备份。仅当每个节点组的LCP线程或LQH线程的总数发生更改时,才需要执行此步骤。
shell>
mysqldump --no-data --routines --events --triggers --databases > myschema.sql重要
NDB
使用ndb_mgm创建本机备份后,如果执行此操作,则不得在创建模式备份之前进行任何模式更改。将备份目录复制到新群集。例如,如果要还原的备份的ID为1和
BackupDataDir
=,则该节点上的备份路径为。在此目录中,有三个文件,在这里列出:/backups/node_nodeid
/backups/node_1/BACKUP/BACKUP-1
BACKUP-1-0.1.Data
BACKUP-1.1.ctl
BACKUP-1.1.log
您应该将整个目录复制到新节点。
如果需要创建模式文件,请将其复制到SQL节点上的mysqld可以读取的位置。
无需从一个或多个特定节点还原备份。
要从刚刚创建的备份中还原,请执行以下步骤:
恢复架构。
如果使用mysqldump创建了单独的模式备份文件,则使用mysql客户端导入该文件,类似于此处所示:
shell>
mysql < myschema.sql导入模式文件时,除了显示的内容外,您可能还需要指定
--user
和--password
选项(可能还有其他选项),以便mysql客户端能够连接到MySQL服务器。如果你是不是需要创建一个模式文件,你可以重新创建使用模式ndb_restore
--restore-meta
(缩写形式-m
),类似于下面显示的那样:shell>
ndb_restore --nodeid=1 --backupid=1 --restore-meta --backup-path=/backups/node_1/BACKUP/BACKUP-1ndb_restore必须能够联系管理服务器;
--ndb-connectstring
如果需要,请添加选项,以实现此目的。
恢复数据。对于原始群集中的每个数据节点,每次都需要使用该数据节点的节点ID来完成一次此操作。假设最初有4个数据节点,则所需的命令集如下所示:
ndb_restore --nodeid=1 --backupid=1 --restore-data --backup-path=/backups/node_1/BACKUP/BACKUP-1 --disable-indexes ndb_restore --nodeid=2 --backupid=1 --restore-data --backup-path=/backups/node_2/BACKUP/BACKUP-1 --disable-indexes ndb_restore --nodeid=3 --backupid=1 --restore-data --backup-path=/backups/node_3/BACKUP/BACKUP-1 --disable-indexes ndb_restore --nodeid=4 --backupid=1 --restore-data --backup-path=/backups/node_4/BACKUP/BACKUP-1 --disable-indexes
这些可以并行运行。
确保
--ndb-connectstring
根据需要添加该选项。重建索引。这些被
--disable-indexes
刚刚显示的命令中使用的选项禁用。重新创建索引可以避免由于恢复在所有点上都不统一而导致的错误。在某些情况下,重建索引也可以提高性能。要重建索引,请在单个节点上执行一次以下命令:shell>
ndb_restore --nodeid=1 --backupid=1 --backup-path=/backups/node_1/BACKUP/BACKUP-1 --rebuild-indexes如前所述,您可能需要添加该
--ndb-connectstring
选项,以便ndb_restore可以联系管理服务器。
从并行备份中还原
从NDB Cluster 8.0.16开始,可以使用具有多个LDM的ndbmtd在每个数据节点上进行并行备份(请参见“NDB集群在线备份”)。接下来的两节介绍了如何还原以这种方式进行的备份。
并行还原并行备份
要并行还原并行备份,需要NDB Cluster发行版8.0.16或更高版本中的ndb_restore二进制文件。该过程与ndb_restore程序的说明下的“常规用法”部分中概述的过程没有本质上的不同,它包括执行两次ndb_restore,类似于此处所示:
shell>ndb_restore -n 1 -b 1 -m --backup-path=path/to/backup_dir/BACKUP/BACKUP-backup_id shell>ndb_restore -n 1 -b 1 -r --backup-path=path/to/backup_dir/BACKUP/BACKUP-backup_id
backup_id
是要还原的备份的ID。在一般情况下,不需要其他特殊参数。ndb_restore始终检查该--backup-path
选项指示的目录下是否存在并行子目录,并(依次)恢复元数据(串行)和表数据(并行)。
串行还原并行备份
可以恢复使用串行方式在数据节点上使用并行性进行的备份。为此,请调用ndb_restore并--backup-path
指向每个LDM在主备份目录下创建的子目录,一次指向任何一个子目录以还原元数据(这无关紧要,因为每个子目录都包含元数据的完整副本)),然后依次转到每个子目录以还原数据。假设我们要恢复具有拍摄四个的LDM备份ID 100备份,那BackupDataDir
是/opt
。在这种情况下,要恢复元数据,我们可以这样调用ndb_restore:
shell>ndb_restore -n 1 -b 1 -m --backup-path=opt/BACKUP/BACKUP-100/BACKUP-100-PART-1-OF-4
要恢复表数据,请执行四次ndb_restore,每次依次使用其中一个子目录,如下所示:
shell>ndb_restore -n 1 -b 1 -r --backup-path=opt/BACKUP/BACKUP-100/BACKUP-100-PART-1-OF-4 shell>ndb_restore -n 1 -b 1 -r --backup-path=opt/BACKUP/BACKUP-100/BACKUP-100-PART-2-OF-4 shell>ndb_restore -n 1 -b 1 -r --backup-path=opt/BACKUP/BACKUP-100/BACKUP-100-PART-3-OF-4 shell>ndb_restore -n 1 -b 1 -r --backup-path=opt/BACKUP/BACKUP-100/BACKUP-100-PART-4-OF-4
您可以使用与NDB Cluster软件较早版本一起提供的ndb_restore二进制文件,采用相同的技术将并行备份还原到不支持并行备份的NDB Cluster较早版本(NDB 8.0.16之前的版本)。