21.4.24 ndb_restore-还原 NDB 群集备份

NDB 群集还原程序被实现为单独的命令行 Utilndb_restore,通常可以在 MySQL bin目录中找到该 Util。该程序读取作为备份结果创建的文件,并将存储的信息插入数据库。

Note

从 NDB 7.5.15 和 7.6.11 开始,该程序运行结束时不再打印NDBT_ProgramExit: ...。从早期版本升级时,应相应地修改依赖于此行为的应用程序。

必须对用于创建备份的START BACKUP命令创建的每个备份文件执行一次ndb_restore(请参阅第 21.5.8.2 节“使用 NDB 群集 ManagementClient 端创建备份”)。这等于创建备份时群集中的数据节点数。

Note

在使用ndb_restore之前,建议群集以单用户模式运行,除非要并行还原多个数据节点。有关更多信息,请参见第 21.5.6 节“ NDB 群集单用户模式”

下 table 包含特定于 NDB Cluster 本机备份还原程序ndb_restore的选项。附加说明如下 table 所示。有关大多数 NDB 群集程序(包括ndb_restore)共有的选项,请参见第 21.4.32 节“ NDB 群集程序的公用选项-NDB 群集程序的公用选项”

table21.255 ndb_restore 程序的命令行选项

FormatDescription添加,不建议使用或删除
--allow-pk-changes[=0|1]允许更改构成 table 主键的列集添加:NDB 7.6.14
--append将数据追加到制 table 符分隔的文件中(在所有基于 MySQL 5.7 的版本中受支持)
--backup-path=dir_name备份文件目录的路径(在所有基于 MySQL 5.7 的版本中受支持)
--backupid=# ,

-b
从具有此 ID 的备份中恢复(在所有基于 MySQL 5.7 的发行版中受支持)
--connect ,
-c
--connectstring的别名((所有基于 MySQL 5.7 的版本均支持)
--disable-indexes导致备份中的索引被忽略;可能会减少还原数据所需的时间(所有基于 MySQL 5.7 的版本均支持)
--dont-ignore-systab-0 ,
-f
在还原期间请勿忽略系统 table;仅用于实验;非用于生产(在所有基于 MySQL 5.7 的版本中受支持)
--exclude-databases=db-list要排除的一个或多个数据库的列 table(包括未命名的数据库)(在所有基于 MySQL 5.7 的版本中受支持)
--exclude-intermediate-sql-tables[=TRUE|FALSE]如果为 TRUE(默认值),则不要还原复制 ALTER TABLE 操作时遗留下来的任何中间 table(名称带有“#sql-”前缀)((所有基于 MySQL 5.7 的版本均支持)
--exclude-missing-columns导致 table 的备份版本中数据库的 table 版本中缺少的列被忽略(在所有基于 MySQL 5.7 的发行版中受支持)
--exclude-missing-tables导致数据库中缺少的备份 table 被忽略(在所有基于 MySQL 5.7 的版本中受支持)
--exclude-tables=table-list要排除的一个或多个 table 的列 table(包括同一数据库中未命名的 table);每个 table 引用都必须包含数据库名称(所有基于 MySQL 5.7 的版本均支持)
--fields-enclosed-by=char字段用此字符括起来(所有基于 MySQL 5.7 的发行版均支持)
--fields-optionally-enclosed-by字段可以用此字符括起来(所有基于 MySQL 5.7 的发行版均支持)
--fields-terminated-by=char字段以此字符终止((所有基于 MySQL 5.7 的版本均支持)
--hex以十六进制格式打印二进制类型(所有基于 MySQL 5.7 的版本均支持)
--ignore-extended-pk-updates[=0|1]忽略包含扩展主键中现在包含的列更新的日志条目已添加:NDB 7.6.14
--include-databases=db-list要还原的一个或多个数据库的列 table(不包括未命名的数据库)(在所有基于 MySQL 5.7 的版本中受支持)
--include-tables=table-list要还原的一个或多个 table 的列 table(不包括同一数据库中未命名的 table);每个 table 引用都必须包含数据库名称(所有基于 MySQL 5.7 的版本均支持)
--lines-terminated-by=char行用此字符终止((所有基于 MySQL 5.7 的版本均支持)
--lossy-conversions ,
-L
从备份中还原数据时允许列值(类型降级或符号更改)的有损转换((所有基于 MySQL 5.7 的版本均支持)
--no-binlog如果已连接 mysqld 并使用二进制日志记录,请不要记录恢复的数据(所有基于 MySQL 5.7 的发行版均支持)
--no-restore-disk-objects ,
-d
请勿还原与磁盘数据有关的对象(所有基于 MySQL 5.7 的发行版均支持)
--no-upgrade ,
-u
请勿为尚未调整 VAR 数据大小且不更改列属性的 varsize 属性升级阵列类型(在所有基于 MySQL 5.7 的发行版中均受支持)
--ndb-nodegroup-map=map ,
-z
NDBCLUSTER 存储引擎的节点组 Map;语法:(source_nodegroup,destination_nodegroup)的列 table(在所有基于 MySQL 5.7 的发行版中受支持)
--nodeid=# ,
-n
进行备份的节点的 ID(在所有基于 MySQL 5.7 的版本中受支持)
--num-slices=#按切片还原时要应用的切片数已添加:NDB 7.6.13
--parallelism=# ,
-p
还原数据时要使用的并行事务数(所有基于 MySQL 5.7 的版本均支持)
--preserve-trailing-spaces ,
-P
在将固定宽度的字符串类型升级为可变宽度的类型时,允许保留尾随空格(包括填充)(在所有基于 MySQL 5.7 的版本中受支持)
--print将元数据,数据和日志打印到 stdout(相当于--print-meta --print-data --print-log)(在所有基于 MySQL 5.7 的版本中受支持)
--print-data将数据打印到 stdout(所有基于 MySQL 5.7 的版本均支持)
--print-log将日志打印到 stdout(所有基于 MySQL 5.7 的版本均支持)
--print-meta将元数据打印到 stdout(所有基于 MySQL 5.7 的版本均支持)
--print-sql-log将 SQL 日志写入标准输出;默认为 FALSEADDED:NDB 7.5.4
--progress-frequency=#每给定的秒数显示恢复状态(所有基于 MySQL 5.7 的版本均支持)
--promote-attributes ,
-A
允许从备份还原数据时提升属性(在所有基于 MySQL 5.7 的版本中受支持)
--rebuild-indexes导致在备份中发现有序索引的多线程重建;通过设置 BuildIndexThreads(所有基于 MySQL 5.7 的版本均支持)确定使用的线程数。
--remap-column=[db].[tbl].[col]:[fn]:[args]使用指定的函数和参数将偏移量应用于指定列的值ADDED:NDB 7.6.14
--restore-data ,
-r
使用 NDB API 还原 table 数据并登录到 NDB 群集(在所有基于 MySQL 5.7 的发行版中受支持)
--restore-epoch ,
-e
将纪元信息还原到状态 table 中;在副本群集上用于开始复制很有用;更新或插入 ID 为 0的 mysql.ndb_apply_status 中的行((所有基于 MySQL 5.7 的版本均支持)
--restore-meta ,
-m
使用 NDB API 将元数据还原到 NDB 群集(在所有基于 MySQL 5.7 的版本中受支持)
--restore-privilege-tables还原先前移至 NDB 的 MySQL 特权 table(在所有基于 MySQL 5.7 的版本中受支持)
--rewrite-database=olddb,newdb还原到其他名称的数据库(在所有基于 MySQL 5.7 的版本中受支持)
--skip-broken-objects忽略备份文件中缺少的 Blobtable(所有基于 MySQL 5.7 的版本均支持)
--skip-table-check ,
-s
在还原过程中跳过 table 结构检查(在所有基于 MySQL 5.7 的发行版中均受支持)
--skip-unknown-objects将从较新的 NDB 版本还原到较旧版本的备份时,ndb_restore 无法识别的架构对象将被忽略((在所有基于 MySQL 5.7 的版本中均受支持)
--slice-id=#切片 ID,按切片还原时添加:NDB 7.6.13
--tab=dir_name ,
-T dir_name
在提供的路径中为每个 table 创建一个制 table 符分隔的.txt 文件(在所有基于 MySQL 5.7 的发行版中受支持)
--verbose=#输出中的详细程度(在所有基于 MySQL 5.7 的版本中受支持)

此 Util 的典型选项如下所示:

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_restore还原任何包含唯一索引的 table 时,必须包含--disable-indexes--rebuild-indexes。 (缺陷#57782,错误#11764893)

-c选项用于指定连接字符串,该字符串告诉ndb_restore在何处定位集群 Management 服务器(请参见第 21.3.3.3 节“ NDB 群集连接字符串”)。如果未使用此选项,则ndb_restore尝试连接到localhost:1186上的 Management 服务器。该 Util 充当群集 API 节点,因此需要一个空闲的连接“插槽”才能连接到群集 Management 服务器。这意味着在群集config.ini文件中必须至少有一个[api][mysqld]部分可以使用。出于这个原因,最好在config.ini中至少保留一个空的[api][mysqld]节,该节未用于 MySQL 服务器或其他应用程序(请参见第 21.3.3.7 节“在 NDB 群集中定义 SQL 和其他 API 节点”)。

您可以使用ndb_mgmManagementClient 端中的 SHOW 命令来验证ndb_restore是否已连接到群集。您也可以从系统 Shell 完成此操作,如下所示:

shell> ndb_mgm -e "SHOW"

以下列 table 中提供了有关ndb_restore使用的所有选项的更多详细信息:

  • --allow-pk-changes

PropertyValue
Command-Line Format--allow-pk-changes[=0|1]
Introduced5.7.29-ndb-7.6.14
TypeInteger
Default Value0
Minimum Value0
Maximum Value1

当此选项设置为1时,ndb_restore允许 table 定义中的主键与备份中同一 table 的主键不同。当在一个或多个 table 上使用主键更改在不同模式版本之间进行备份和还原时,这可能是理想的。并且看起来,使用 ndb_restore 执行还原操作比在还原 table 模式和数据之后发出许多ALTER TABLE语句更简单或更有效。

--allow-pk-changes支持主键定义的以下更改:

  • 扩展主键 :备份中的 table 模式中存在的不可为空的列成为数据库中 table 主键的一部分。

Important

扩展 table 的主键时,在进行备份时不得更新成为主键一部分的任何列; ndb_restore发现的任何此类更新都会导致还原操作失败,即使值没有发生变化也是如此。在某些情况下,可以使用--ignore-extended-pk-updates选项覆盖此行为。有关更多信息,请参见此选项的描述。

  • 收缩主键(1) :在备份模式中已经属于 table 主键的列不再是主键的一部分,而是保留在 table 中。

  • 收缩主键(2) :备份 table 中已经属于 table 主键一部分的列将从 table 中完全删除。

这些差异可以与ndb_restore支持的其他架构差异结合使用,包括对 blob 和 text 列的更改要求使用登台 table。

此处列出了使用主键架构更改的典型方案中的基本步骤:

扩展主键时,ndb_restore可能需要在还原操作期间使用临时的辅助唯一索引将旧的主键 Map 到新的主唯一索引。仅在需要将备份日志中的事件应用于具有扩展主键的 table 时,才创建此类索引。该索引名为NDB$RESTORE_PK_MAPPING,并在需要它的每个 table 上创建;如有必要,它可以由并行运行的ndb_restore个实例的多个实例共享。 (在还原过程结束时运行ndb_restore --rebuild-indexes会导致删除该索引。)

  • --append

PropertyValue
Command-Line Format--append

当与--tab--print-data选项一起使用时,这会导致将数据附加到具有相同名称的任何现有文件中。

  • --backup-path = dir_name

PropertyValue
Command-Line Format--backup-path=dir_name
TypeDirectory name
Default Value./

备份目录的路径是必需的;使用--backup-path选项将其提供给ndb_restore,并且必须包含与要还原的备份的 ID 备份相对应的子目录。例如,如果数据节点的DataDir/var/lib/mysql-cluster,则备份目录为/var/lib/mysql-cluster/BACKUP,并且可以在/var/lib/mysql-cluster/BACKUP/BACKUP-3中找到 ID 为 3 的备份的备份文件。该路径可以是绝对路径,也可以是相对于ndb_restore可执行文件所在目录的路径,并且可以选择以backup-path=作为前缀。

可以使用与创建备份时不同的配置将备份还原到数据库。例如,假设在具有两个存储节点(具有节点 ID 23)的群集中创建的备份 ID 为12的备份将还原到具有四个节点的群集中。然后,ndb_restore必须运行两次-对群集中进行备份的每个存储节点一次。但是,ndb_restore不能总是将运行一个 MySQL 版本的群集还原到运行另一个 MySQL 版本的群集。有关更多信息,请参见第 21.2.9 节“升级和降级 NDB 集群”

Important

无法使用较旧版本的ndb_restore还原从较新版本的 NDB Cluster 创建的备份。您可以将从较新版本的 MySQL 创建的备份还原到较旧的群集,但必须使用较新的 NDB 群集版本的ndb_restore副本。

例如,要将从运行 NDB Cluster 7.5.20 的群集的群集备份还原到运行 NDB Cluster 7.4.30 的群集,必须使用 NDB Cluster 7.5.20 发行版随附的ndb_restore

为了更快速地恢复,只要有足够数量的可用群集连接,就可以并行恢复数据。也就是说,在并行还原到多个节点时,群集config.ini文件中的每个并发ndb_restore进程必须具有[api][mysqld]部分。但是,必须始终在日志之前应用数据文件。

  • --backupid = # , -b

PropertyValue
Command-Line Format--backupid=#
TypeNumeric
Default Valuenone

此选项用于指定备份的 ID 或序列号,与 ManagementClient 端在备份完成后显示的Backup backup_id completed消息中显示的编号相同。 (请参阅第 21.5.8.2 节“使用 NDB 群集 ManagementClient 端创建备份”。)

Important

还原群集备份时,必须确保从具有相同备份 ID 的备份中还原所有数据节点。使用来自不同备份的文件充其量只能将群集还原到不一致的状态,并且可能会完全失败。

在 NDB 7.5.13 和更高版本以及 NDB 7.6.9 和更高版本中,此选项是必需的。

  • --connect , -c

PropertyValue
Command-Line Format--connect
TypeString
Default Valuelocalhost:1186

--ndb-connectstring的别名。

  • --disable-indexes

PropertyValue
Command-Line Format--disable-indexes

从本机NDB备份还原数据期间,禁用索引的还原。之后,您可以使用--rebuild-indexes通过多线程构建索引来一次恢复所有 table 的索引,这应该比同时为大型 table 重建索引要快。

  • --dont-ignore-systab-0 , -f

PropertyValue
Command-Line Format--dont-ignore-systab-0

通常,在还原 table 数据和元数据时,ndb_restore会忽略备份中存在的NDB系统 table 的副本。 --dont-ignore-systab-0使系统 table 得以还原。 此选项仅用于实验和开发用途,不建议在生产环境中使用

  • --exclude-databases = db-list

PropertyValue
Command-Line Format--exclude-databases=db-list
TypeString
Default Value``

用逗号分隔的一个或多个数据库的列 table,这些列 table 不应还原。

此选项通常与--exclude-tables结合使用;有关更多信息和示例,请参见该选项的描述。

  • --exclude-intermediate-sql-tables[ = TRUE|FALSE]

PropertyValue
Command-Line Format--exclude-intermediate-sql-tables[=TRUE|FALSE]
TypeBoolean
Default ValueTRUE

执行复制ALTER TABLE操作时,mysqld创建中间 table(其名称以#sql-开头)。当TRUE时,--exclude-intermediate-sql-tables选项可防止ndb_restore恢复这些操作可能遗留下来的 table。默认情况下,此选项为TRUE

  • --exclude-missing-columns

PropertyValue
Command-Line Format--exclude-missing-columns

可以使用此选项仅还原选定的 table 列,这导致ndb_restore忽略与正在备份中找到的那些 table 的版本相比,正在还原的 table 中缺少的任何列。此选项适用于所有要还原的 table。如果您希望仅将此选项应用于选定的 table 或数据库,则可以将其与本节其他地方描述的一个或多个--include-*--exclude-*选项结合使用,然后使用补充集将数据恢复到其余 table 中这些选项中。

  • --exclude-missing-tables

PropertyValue
Command-Line Format--exclude-missing-tables

可以使用此选项仅还原选定的 table,这将导致ndb_restore忽略备份中目标数据库中未找到的任何 table。

  • --exclude-tables = table-list

PropertyValue
Command-Line Format--exclude-tables=table-list
TypeString
Default Value``

一个或多个要排除的 table 的列 table;每个 table 引用都必须包含数据库名称。常与--exclude-databases一起使用。

当使用--exclude-databases--exclude-tables时,仅排除由该选项命名的那些数据库或 table;所有其他数据库和 table 都由ndb_restore恢复。

下 table 显示了对ndb_restore usng --exclude-*选项的调用(为清楚起见,可能省略了其他可能的选项),以及这些选项对从 NDB 群集备份还原的影响:

*table21.256 使用--exclude- 选项对 ndb_restore 进行了多次调用,以及这些选项对从 NDB 群集备份还原的影响.

OptionResult
--exclude-databases=db1恢复所有数据库中除db1之外的所有 table; db1中没有 table 被还原
--exclude-databases=db1,db2(或--exclude-databases=db1 --exclude-databases=db2)恢复所有数据库中除db1db2之外的所有 table;不会还原db1db2中的 table
--exclude-tables=db1.t1恢复数据库db1中除t1以外的所有 table;还原db1中的所有其他 table;恢复所有其他数据库中的所有 table
--exclude-tables=db1.t2,db2.t1(或--exclude-tables=db1.t2 --exclude-tables=db2.t1)数据库db1中除t2以外的所有 table 以及数据库db2中除 tablet1以外的所有 table 都将还原;不会还原db1db2中的其他 table;恢复所有其他数据库中的所有 table

您可以同时使用这两个选项。例如,以下操作将恢复所有数据库中的所有 table,但数据库db1db2除外,数据库db3中的 tablet1t2除外:

shell> ndb_restore [...] --exclude-databases=db1,db2 --exclude-tables=db3.t1,db3.t2

(再次,为了简洁明了,我们从刚刚显示的示例中省略了其他可能的必要选项.)

您可以按照以下规则一起使用--include-*--exclude-*选项:

  • 所有--include-*--exclude-*选项的操作都是累积的。

    • 按照从右到左传递给 ndb_restore 的 Sequences 评估所有--include-*--exclude-*选项。

    • 如果选项冲突,则第一个(最右边)选项优先。换句话说,与给定数据库或 table 匹配的第一个选项(从右到左)“获胜”。

例如,以下一组选项使ndb_restore从数据库db1还原除db1.t1之外的所有 table,而从其他任何数据库都不还原其他 table:

--include-databases=db1 --exclude-tables=db1.t1

但是,反转刚刚给出的选项的 Sequences 只会导致还原数据库db1中的所有 table(包括db1.t1,但没有任何其他数据库中的 table),因为最右边的--include-databases选项是与数据库的第一个匹配项db1并因此优先于与db1匹配的任何其他选项或db1中的任何 table:

--exclude-tables=db1.t1 --include-databases=db1
  • --fields-enclosed-by = char

PropertyValue
Command-Line Format--fields-enclosed-by=char
TypeString
Default Value``

每个列值都包含在传递给此选项的字符串中(与数据类型无关;请参见--fields-optionally-enclosed-by的描述)。

  • --fields-optionally-enclosed-by

PropertyValue
Command-Line Format--fields-optionally-enclosed-by
TypeString
Default Value``

传递给此选项的字符串用于封装包含字符数据(例如CHARVARCHARBINARYTEXTENUM)的列值。

  • --fields-terminated-by = char

PropertyValue
Command-Line Format--fields-terminated-by=char
TypeString
Default Value\t (tab)

传递给此选项的字符串用于分隔列值。默认值为制 table 符(\t)。

  • --hex

PropertyValue
Command-Line Format--hex

如果使用此选项,则所有二进制值均以十六进制格式输出。

  • --ignore-extended-pk-updates

PropertyValue
Command-Line Format--ignore-extended-pk-updates[=0|1]
Introduced5.7.29-ndb-7.6.14
TypeInteger
Default Value0
Minimum Value0
Maximum Value1

使用--allow-pk-changes选项时,在进行备份时不得更新成为 table 主键一部分的列;此类列应在将值插入其中之前一直保持相同的值,直到删除包含这些值的行为止。如果ndb_restore在还原备份时遇到这些列的更新,则还原失败。因为某些应用程序可能在更新行时为所有列设置值,即使某些列值未更改,备份也可能包含日志事件,似乎是在更新实际上未修改的列。在这种情况下,您可以将--ignore-extended-pk-updates设置为1,强制ndb_restore忽略此类更新。

Important

当导致忽略这些更新时,用户应负责确保没有任何更新成为主键的一部分的列的值。

有关更多信息,请参见--allow-pk-changes的描述。

  • --include-databases = db-list

PropertyValue
Command-Line Format--include-databases=db-list
TypeString
Default Value``

以逗号分隔的要还原的一个或多个数据库的列 table。常与--include-tables一起使用;有关更多信息和示例,请参见该选项的描述。

  • --include-tables = table-list

PropertyValue
Command-Line Format--include-tables=table-list
TypeString
Default Value``

用逗号分隔的 table 列 table;每个 table 引用都必须包含数据库名称。

当使用--include-databases--include-tables时,仅还原由该选项命名的那些数据库或 table;否则,将恢复该数据库或 table。所有其他数据库和 table 均被ndb_restore排除,并且不会还原。

下 table 显示了使用--include-*选项对ndb_restore的多次调用(为清晰起见,可能省略了其他可能的选项),以及这些对从 NDB 群集备份还原的影响:

*table21.257 使用--include- 选项对 ndb_restore 的一些调用及其对从 NDB 群集备份还原的影响.

OptionResult
--include-databases=db1仅还原数据库db1中的 table;其他所有数据库中的所有 table 都将被忽略
--include-databases=db1,db2(或--include-databases=db1 --include-databases=db2)仅还原数据库db1db2中的 table;其他所有数据库中的所有 table 都将被忽略
--include-tables=db1.t1只有数据库db1中的 tablet1被恢复;不会还原db1或任何其他数据库中的其他 table
--include-tables=db1.t2,db2.t1(或--include-tables=db1.t2 --include-tables=db2.t1)只有数据库db1中的 tablet2和数据库db2中的 tablet1被还原;不会还原db1db2或任何其他数据库中的其他 table

您也可以一起使用这两个选项。例如,以下操作将还原数据库db1db2中的所有 table 以及数据库db3中的 tablet1t2(并且不还原其他数据库或 table):

shell> ndb_restore [...] --include-databases=db1,db2 --include-tables=db3.t1,db3.t2

(同样,在刚刚显示的示例中,我们省略了其他可能需要的选项.)

使用此处显示的语法,还可以仅还原选定数据库或单个数据库中的选定 table,而没有任何--include-*(或--exclude-*)选项。

ndb_restore other_options db_name,[db_name[,...] | tbl_name[,tbl_name][,...]]

换句话说,您可以指定以下任一要还原的内容:

  • 来自一个或多个数据库的所有 table

    • 单个数据库中的一个或多个 table
  • --lines-terminated-by = char

PropertyValue
Command-Line Format--lines-terminated-by=char
TypeString
Default Value\n (linebreak)

指定用于结束输出的每一行的字符串。默认值为换行符(\n)。

  • --lossy-conversions , -L

PropertyValue
Command-Line Format--lossy-conversions
TypeBoolean
Default ValueFALSE(如果未使用该选项)

此选项旨在补充--promote-attributes选项。从备份还原数据时,使用--lossy-conversions可以进行列值的有损转换(类型降级或符号更改)。除某些 exception,降级的规则与 MySQL 复制的规则相同。有关属性降级当前支持的特定类型转换的信息,请参见第 16.4.1.10.2 节,“复制具有不同数据类型的列”

ndb_restore报告每个属性和列一次在有损转换期间执行的任何数据截断。

  • --no-binlog

PropertyValue
Command-Line Format--no-binlog

此选项可防止任何连接的 SQL 节点将ndb_restore恢复的数据写入其二进制日志。

  • --no-restore-disk-objects , -d

PropertyValue
Command-Line Format--no-restore-disk-objects
TypeBoolean
Default ValueFALSE

此选项阻止ndb_restore还原任何 NDB 群集磁盘数据对象,例如 table 空间和日志文件组。有关这些的更多信息,请参见第 21.5.10 节“ NDB 群集磁盘数据 table”

  • --no-upgrade , -u

PropertyValue
Command-Line Format--no-upgrade

使用ndb_restore还原备份时,使用旧的固定格式创建的VARCHAR列将调整大小,并使用现在采用的可变宽度格式重新创建。通过指定--no-upgrade可以覆盖此行为。

  • --ndb-nodegroup-map = map , -z

PropertyValue
Command-Line Format--ndb-nodegroup-map=map

此选项可用于将备份从一个节点组还原到另一个节点组。它的参数是格式为source_node_group, target_node_group的列 table。

  • --nodeid = # , -n

PropertyValue
Command-Line Format--nodeid=#
TypeNumeric
Default Valuenone

指定在其上进行备份的数据节点的节点 ID。

当还原到具有与进行备份的数据节点数量不同的数据节点数的群集时,此信息有助于识别要还原到给定节点的一组正确的文件。 (在这种情况下,通常需要将多个文件还原到单个数据节点.)有关其他信息和示例,请参见第 21.4.24.1 节“还原到不同数量的数据节点”

在 NDB 7.5.13 和更高版本以及 NDB 7.6.9 和更高版本中,此选项是必需的。

  • --num-slices = #

PropertyValue
Command-Line Format--num-slices=#
Introduced5.7.29-ndb-7.6.13
TypeInteger
Default Value1
Minimum Value1
Maximum Value1024

当按片还原备份时,此选项设置将备份分成的片数。这允许ndb_restore的多个实例并行还原不相交的子集,从而有可能减少执行还原操作所需的时间。

切片是给定备份中数据的子集;也就是说,它是使用--slice-id选项指定的,具有相同分片 ID 的一组片段。这两个选项必须始终一起使用,并且由--slice-id设置的值必须始终小于切片数。

ndb_restore遇到碎片,并为每个碎片分配一个碎片计数器。在按片还原时,将片 ID 分配给每个片段。切片 ID 的范围比切片数小 0 到 1.对于不是BLOBtable 的 table,使用下面显示的公式确定给定片段所属的切片:

[slice_ID] = [fragment_counter] % [number_of_slices]

对于BLOBtable,不使用片段计数器。而是使用分片编号以及BLOBtable 的主 tableID(请注意NDB在内部将* BLOB *值存储在单独的 table 中)。在这种情况下,如下所示计算给定片段的切片 ID:

[slice_ID] =
([main_table_ID] + [fragment_ID]) % [number_of_slices]

因此,通过* N * slices 进行恢复意味着运行_N * ndb_restore的实例,所有实例均通过--num-slices=N(以及其他必要的选项),每个实例分别通过slice-id=N-1,_6,--slice-id=2--slice-id=3等。

  • --parallelism = # , -p

PropertyValue
Command-Line Format--parallelism=#
TypeNumeric
Default Value128
Minimum Value1
Maximum Value1024

ndb_restore使用单行事务来同时应用许多行。此参数确定ndb_restore实例尝试使用的并行事务(并行行)的数量。默认情况下为 128;最小值为 1,最大值为 1024.

执行插入的工作在涉及的数据节点中的线程之间并行化。该机制用于从.Data文件还原批量数据,即数据的模糊快照。它不用于构建或重建索引。更改日志是串行应用的;索引删除和构建是 DDL 操作,并分别处理。还原的 Client 端上没有线程级并行性。

  • --preserve-trailing-spaces , -P

PropertyValue
Command-Line Format--preserve-trailing-spaces

在将固定宽度字符数据类型提升为等宽宽度时(即,将CHAR列值提升为VARCHAR或将BINARY列值提升为VARBINARY),导致保留尾随空格。否则,当将任何尾随空格插入到新列中时,它们将从这些列值中删除。

Note

尽管您可以将CHAR列提升为VARCHAR,将BINARY列提升为VARBINARY,但是不能将VARCHAR列提升为CHAR或将VARBINARY列提升为BINARY

  • --print

PropertyValue
Command-Line Format--print
TypeBoolean
Default ValueFALSE

使ndb_restore将所有数据,元数据和日志打印到stdout。等效于一起使用--print-data--print-meta--print-log选项。

Note

使用--print或任何--print_*选项实际上是在进行空运行。包含一个或多个这些选项会使所有输出重定向到stdout;在这种情况下,ndb_restore不会尝试将数据或元数据还原到 NDB 群集。

  • --print-data

PropertyValue
Command-Line Format--print-data
TypeBoolean
Default ValueFALSE

使ndb_restore将其输出定向到stdout。通常与--tab--fields-enclosed-by--fields-optionally-enclosed-by--fields-terminated-by--hex--append中的一个或多个一起使用。

TEXTBLOB列的值始终被截断。这些值将被截断为输出中的前 256 个字节。使用--print-data时,当前不能覆盖它。

  • --print-log

PropertyValue
Command-Line Format--print-log
TypeBoolean
Default ValueFALSE

使ndb_restore将其日志输出到stdout

  • --print-meta

PropertyValue
Command-Line Format--print-meta
TypeBoolean
Default ValueFALSE

将所有元数据打印到stdout

  • print-sql-log

PropertyValue
Command-Line Format--print-sql-log
Introduced5.7.16-ndb-7.5.4
TypeBoolean
Default ValueFALSE

将 SQL 语句记录到stdout。使用该选项启用;通常,此行为是禁用的。该选项在尝试记录之前将检查所有要还原的 table 是否具有显式定义的主键。对仅具有由NDB实现的隐藏主键的 table 的查询无法转换为有效的 SQL。

此选项不适用于具有BLOB列的 table。

--print-sql-log选项已添加到 NDB 7.5.4 中。错误#13511949)

  • --progress-frequency = N

PropertyValue
Command-Line Format--progress-frequency=#
TypeNumeric
Default Value0
Minimum Value0
Maximum Value65535

进行备份时,请每隔N *秒打印一次状态报告。 0(默认值)将导致不打印任何状态报告。最大值为 65535.

  • --promote-attributes , -A

PropertyValue
Command-Line Format--promote-attributes

ndb_restore支持有限的属性提升,其方式与 MySQL 复制所支持的方式大致相同;也就是说,从给定类型的列备份的数据通常可以使用“更大,相似”的类型还原到列。例如,可以将CHAR(20)列中的数据还原到声明为VARCHAR(20)VARCHAR(30)CHAR(30)的列中; MEDIUMINT列中的数据可以恢复到INTBIGINT类型的列。有关属性升级当前支持的类型转换 table,请参见第 16.4.1.10.2 节,“复制具有不同数据类型的列”

必须明确启用ndb_restore的属性提升,如下所示:

  • 准备要将备份还原到的 table。 ndb_restore不能用于重新创建具有不同于原始定义的 table;这意味着您必须在还原 table 元数据之后但在还原数据之前,手动创建 table,或使用ALTER TABLE更改要升级的列。

  • 恢复 table 数据时,请使用--promote-attributes选项(简称-A)调用ndb_restore。如果不使用此选项,则不会进行属性升级;相反,还原操作将失败并显示错误。

在字符数据类型和TEXTBLOB之间转换时,只能同时执行字符类型(CHARVARCHAR)和二进制类型(BINARYVARBINARY)之间的转换。例如,在对ndb_restore的相同调用中,不能将INT列提升为BIGINT,而不能将VARCHAR列提升为TEXT

不支持使用不同的字符集在TEXT列之间进行转换,并且明确禁止这样做。

当使用ndb_restore将字符或二进制类型转换为TEXTBLOB时,您可能会注意到它创建并使用了一个或多个名为table_name$STnode_id的登台 table。这些 table 随后不再需要,通常在成功还原后由ndb_restore删除。

  • --rebuild-indexes

PropertyValue
Command-Line Format--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

PropertyValue
Command-Line Format--remap-column=[db].[tbl].[col]:[fn]:[args]
Introduced5.7.29-ndb-7.6.14
TypeString
Default Value[none]

--restore-data一起使用时,此选项将函数应用于所指示的列的值。参数字符串中的值在此处列出:

      • tbl *:table 格名称。
      • col *:要更新的列的名称。此列的类型必须为INTBIGINT。该列也可以是UNSIGNED,但不是必需的。
      • fn *:函数名称;当前,唯一支持的名称是offset

如果将偏移值应用于列将导致上溢或下溢,则还原操作将失败。例如,如果该列是BIGINT,并且此选项尝试将偏移值 8 应用于该列值为 4294967291 的行,则可能发生这种情况,因为4294967291 + 8 = 4294967299 > 4294967295

当您希望将存储在 NDB 群集的多个源实例(全部使用相同的架构)中的数据合并到单个目标 NDB 群集中时,可以使用 NDB 本机备份(请参见第 21.5.8.2 节“使用 NDB 群集 ManagementClient 端创建备份”)和ndb_restore来合并数据,其中此选项非常有用。并且唯一键值在源群集之间重叠,因此,作为过程的一部分,有必要将这些值重新 Map 到不重叠的范围。保留 table 之间的其他关系也是必要的。为了满足这些要求,可以在相同的ndb_restore调用中多次使用该选项来重新 Map 不同 table 的列,如下所示:

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还可以用于更新同一 table 的多个列。多个 table 和列的组合是可能的。相同 table 的不同列也可以使用不同的偏移量值,如下所示:

shell> ndb_restore --restore-data --remap-column=hr.employee.salary:offset:10000 \
    --remap-column=hr.employee.hours:offset:-10

当源备份包含不应合并的重复 table 时,可以通过使用--exclude-tables--exclude-databases或应用程序中的其他方式来处理此问题。

可以使用显示创建 table获得有关要合并的 table 的结构和其他 Feature 的信息; ndb_desc工具;和MAX()MIN()LAST_INSERT_ID()和其他 MySQL 函数。

不支持在 NDB Cluster 的单独实例中复制从合并 table 到未合并 table 或从未合并 table 到合并 table 的复制。

  • --restore-data , -r

PropertyValue
Command-Line Format--restore-data
TypeBoolean
Default ValueFALSE

输出NDB个 table 数据和日志。

  • --restore-epoch , -e

PropertyValue
Command-Line Format--restore-epoch

向群集复制状态 table 添加(或还原)时期信息。这对于在 NDB 副本群集上启动复制很有用。使用此选项时,如果id列中具有0的行已存在,则更新_。如果尚不存在这样的行,则将其插入。 (请参阅第 21.6.9 节“具有 NDB 群集复制功能的 NDB 群集备份”。)

  • --restore-meta , -m

PropertyValue
Command-Line Format--restore-meta
TypeBoolean
Default ValueFALSE

此选项使ndb_restore打印NDBtable 元数据。

首次运行ndb_restore恢复程序时,还需要恢复元数据。换句话说,您必须重新创建数据库 table-这可以通过使用--restore-meta(-m)选项运行来完成。恢复元数据仅需要在单个数据节点上完成;这足以将其还原到整个群集。

在旧版本的 NDB 群集中,使用此选项还原其架构的 table 使用的分区数量与在原始群集上使用的分区数量相同,即使该分区的数据节点数与新群集不同。在 NDB 7.5.2 和更高版本中,还原元数据时,这不再是问题。 ndb_restore现在使用目标集群的默认分区数,除 nonlocal 数据 Management 器线程的数量也与原始集群中数据节点的数量有所变化。

Note

开始还原备份时,群集应具有一个空数据库。 (换句话说,在执行还原之前,您应该从--initial开始数据节点。)

  • --restore-privilege-tables

PropertyValue
Command-Line Format--restore-privilege-tables
TypeBoolean
Default ValueFALSE(如果未使用该选项)

ndb_restore默认情况下不还原分布式 MySQL 特权 table。此选项使ndb_restore还原特权 table。

仅当在进行备份之前将特权 table 转换为NDB时,此方法才有效。有关更多信息,请参见第 21.5.12 节,“使用共享授予 table 的分布式特权”

  • --rewrite-database = olddb,newdb

PropertyValue
Command-Line Format--rewrite-database=olddb,newdb
TypeString
Default Valuenone

使用此选项可以还原到名称与备份中使用的名称不同的数据库。例如,如果备份是由名为products的数据库构成的,则可以将其包含的数据还原到名为inventory的数据库中,请使用此选项,如下所示(忽略任何其他可能需要的选项):

shell> ndb_restore --rewrite-database=product,inventory

一次调用ndb_restore可以多次使用该选项。因此,可以使用--rewrite-database=db1,db2 --rewrite-database=db3,db4从名称为db1的数据库同时还原为名称为db2的数据库,以及从名称为db3的数据库还原为名称为db4的数据库。在--rewrite-database的多次出现之间可以使用其他ndb_restore选项。

如果多个--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将数据库db1db2的所有 table 和数据还原到数据库db3

Important

使用--rewrite-database从多个备份数据库还原到单个目标数据库时,不检查 table 名或其他对象名之间的冲突,并且不能保证还原行的 Sequences。这意味着在这种情况下,可能会覆盖行并丢失更新。

  • --skip-broken-objects

PropertyValue
Command-Line Format--skip-broken-objects

此选项使ndb_restore在读取本机NDB备份时忽略损坏的 table,并 continue 还原所有剩余的 table(也未损坏)。当前,--skip-broken-objects选项仅在缺少斑点 Componenttable 的情况下有效。

  • --skip-table-check , -s

PropertyValue
Command-Line Format--skip-table-check

可以在不还原 table 元数据的情况下还原数据。默认情况下,执行此操作时,如果在 table 数据和 table 架构之间发现不匹配,则ndb_restore会失败并显示错误;此选项将覆盖该行为。

放宽了使用ndb_restore还原数据时对列定义不匹配的一些限制;当遇到这些类型的不匹配之一时,ndb_restore不会像以前一样以错误停止,而是接受数据并将其插入目标 table 中,同时向用户发出警告,指出这样做已完成。无论是否使用选项--skip-table-check--promote-attributes,都会出现此行为。列定义中的这些差异具有以下类型:

  • 不同的COLUMN_FORMAT设置(FIXEDDYNAMICDEFAULT)

    • 不同的STORAGE设置(MEMORYDISK)

    • 不同的默认值

    • 不同的分配键设置

  • --skip-unknown-objects

PropertyValue
Command-Line Format--skip-unknown-objects

此选项使ndb_restore忽略在读取本机NDB备份时无法识别的任何架构对象。这可用于将备份(从运行 NDB 7.6 的群集复制到运行 NDB 7.5 的群集)。

  • --slice-id = #

PropertyValue
Command-Line Format--slice-id=#
Introduced5.7.29-ndb-7.6.13
TypeInteger
Default Value0
Minimum Value0
Maximum Value1023

按片还原时,这是要还原的片的 ID。此选项始终与--num-slices一起使用,并且其值必须始终小于--num-slices的值。

有关更多信息,请参阅本节其他地方对--num-slices的描述。

  • --tab = dir_name , -T dir_name

PropertyValue
Command-Line Format--tab=dir_name
TypeDirectory name

使--print-data创建转储文件,每个 table 一个,每个命名为tbl_name.txt。它需要将文件保存目录的路径作为参数。使用.作为当前目录。

  • --verbose = #

PropertyValue
Command-Line Format--verbose=#
TypeNumeric
Default Value1
Minimum Value0
Maximum Value255

设置输出详细程度。最小值为 0;最小值为 0.最大值为 255.默认值为 1.

错误报告. ndb_restore报告临时错误和永久错误。如果是临时错误,它可能可以从中恢复,并在这种情况下报告Restore successful, but encountered temporary error, please look at configuration

Important

在使用ndb_restore初始化用于循环复制的 NDB 群集之后,不会自动在充当副本的 SQL 节点上创建二进制日志,并且必须使它们手动创建。要创建二进制日志,请在运行START SLAVE之前在该 SQL 节点上发出SHOW TABLES语句。这是 NDB 群集中的一个已知问题。

将备份还原到 NDB Cluster 的先前版本. 由于使用了较早版本中不存在的功能,因此将 NDB Cluster 的较新版本的备份还原到以前的版本时,您可能会遇到问题。 。例如,默认情况下在 NDB 8.0 中创建的 table 使用utf8mb4_ai_ci字符集,而在 NDB 7.6 和更早版本中则不可用,因此ndb_restore二进制文件无法从这些较早版本之一读取它们。