Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  ndb_restore — Restore an NDB Cluster Backup

25.5.23 NDB 集群还原程序 — 还原 NDB 集群备份

NDB Cluster restoration program 是一个独立的命令行实用工具ndb_restore,通常可以在MySQL bin 目录中找到。该程序读取备份创建的文件,并将存储的信息插入数据库。

ndb_restore 必须执行一次用于每个备份文件的创建,通过START BACKUP命令创建的备份(请参阅Section 25.6.8.2, “使用 NDB 集群管理客户端创建备份”)。这等于在创建备份时集群中的数据节点数量。

Note

在使用ndb_restore之前,建议将集群设置为单用户模式,除非您要并行还原多个数据节点。请参阅Section 25.6.6, “NDB 集群单用户模式”,获取更多信息。

使用ndb_restore的选项显示在下表中。附加描述随后出现。

  • --allow-pk-changes

    Command-Line Format --allow-pk-changes[=0|1]
    Type 整数
    Default Value 0
    Minimum Value 0
    Maximum Value 1

    当此选项设置为1时,ndb_restore允许表定义的主键与备份中相同表的主键不同。这在备份和恢复之间不同的架构版本,一个或多个表的主键更改时可能是有用的,并且它看起来执行恢复操作使用 ndb_restore 更简单或更有效率,而不是发出许多ALTER TABLE语句后恢复表架构和数据。

    下列主键定义更改由--allow-pk-changes支持:

    • 扩展主键:备份中存在的非空值列在表架构中成为数据库中的表主键。

      Important

      当扩展表的主键时,任何成为主键的一部分的列在备份期间不得更新;任何由ndb_restore发现的这样的更新,即使没有更改值,也会导致恢复操作失败。在某些情况下,可以使用--ignore-extended-pk-updates选项来覆盖此行为;请参阅该选项的描述以获取更多信息。

    • 主键收缩(1):备份架构中已经是表主键的一部分的列不再是主键的一部分,但仍然在表中。

    • 主键收缩(2):备份架构中已经是表主键的一部分的列从表中完全删除。

    这些差异可以与ndb_restore支持的其他架构差异结合使用,包括对blob和text列所需的使用暂存表的更改。

    典型场景中使用主键架构变化的一般步骤如下:

    1. 使用ndb_restore--restore-meta恢复表架构。

    2. 将所需的模式更改为所需的模式,或者创建它

    3. 备份所需的模式

    4. 运行ndb_restore --disable-indexes使用上一步的备份,从前面的步骤中删除索引和约束。

    5. 运行ndb_restore --allow-pk-changes(可能与--ignore-extended-pk-updates--disable-indexes和可能需要的其他选项一起使用)来恢复所有数据。

    6. 运行ndb_restore --rebuild-indexes使用上一步创建的备份,以重建索引和约束。

    当扩展主键时,可能需要使用ndb_restore在恢复操作期间使用临时次级唯一索引来映射从旧主键到新一的。这种索引只在必要时创建,以应用备份日志中的事件到具有扩展主键的表中。这索引名为NDB$RESTORE_PK_MAPPING,并且在每个需要它的表上创建;如果有必要,它可以由多个实例共享ndb_restore运行在并行的实例中。 (在恢复过程结束时使用--rebuild-indexes运行ndb_restore将导致此索引被删除。)

  • --append

    Command-Line Format --append

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

  • --backup-path=dir_name

    Command-Line Format --backup-path=path
    Type 目录名称
    Default Value ./

    备份目录的路径是必需的;这个路径将被传递给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为 23)创建,并要恢复到一个有四个节点的集群。那么必须运行ndb_restore两次——一次为备份创建时的每个存储节点集群。然而,ndb_restore不能总是从一个运行不同MySQL版本的集群恢复备份到另一个集群。请参阅Section 25.3.7,“升级和降级NDB集群”,获取更多信息。

    Important

    不能使用旧版本的ndb_restore从新版本的NDB集群恢复备份。可以将一个由新版本MySQL创建的备份恢复到旧集群,但必须使用来自新NDB集群版本的ndb_restore来完成此操作。

    例如,要将从运行NDB集群8.4.0的集群备份还原到运行NDB集群8.0.35的集群,您必须使用与NDB集群8.0.35发行版中提供的ndb_restore一起使用的。[api][mysqld]部分在集群config.ini文件中可用。即,当并行还原到多个节点时,您必须有一个足够数量的集群连接可用。但是,数据文件总是在日志之前应用。

    要加快恢复速度,可以并行地将数据还原,只要有足够数量的集群连接可用。也就是说,当并行还原到多个节点时,您必须在每个同时运行的ndb_restore过程中有一个[api][mysqld]部分在集群config.ini文件中可用。然而,数据文件总是在日志之前应用。

  • --backup-password=password

    Command-Line Format --backup-password=password
    Type 字符串
    Default Value [none]

    此选项指定用于解密加密备份的密码。必须与用来加密备份相同。

    密码必须是1到256个字符的长度,并且必须用单引号或双引号括起来。它可以包含任何ASCII字符,具有字符代码32、35、38、40-91、93、95和97-126;换句话说,它可以使用任何可打印的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提供密码时交互地使用--password的方式。

  • --backupid=#, -b

    Command-Line Format --backupid=#
    Type 数字
    Default Value none

    这个选项是必需的;它用于指定备份的ID或序列号,并且与管理客户端在备份完成时显示的相同编号相匹配。请参阅第 25.6.8.2 节,“使用 NDB 集群管理客户端创建备份”

    Important

    在恢复集群备份时,您必须确保从具有相同备份 ID 的备份中恢复所有数据节点。使用来自不同备份的文件最多只能将集群恢复到不一致的状态,并且可能完全失败。

  • --character-sets-dir

    Command-Line Format --character-sets-dir=path

    包含字符集的目录。

  • --connect, -c

    Command-Line Format --connect=connection_string
    Type 字符串
    Default Value localhost:1186

    --ndb-connectstring的别名。

  • --connect-retries

    Command-Line Format --connect-retries=#
    Type 整数
    Default Value 12
    Minimum Value 0
    Maximum Value 12

    重连次数,直到放弃。

  • --connect-retry-delay

    Command-Line Format --connect-retry-delay=#
    Type 整数
    Default Value 5
    Minimum Value 0
    Maximum Value 5

    重连尝试之间等待的秒数。

  • --connect-string

    Command-Line Format --connect-string=connection_string
    Type String
    Default Value [none]

    --ndb-connectstring相同。

  • --core-file

    Command-Line Format --core-file

    在出现错误时写入核心文件;用于调试。

  • --decrypt

    Command-Line Format --decrypt

    使用--backup-password选项提供的密码解密加密备份。

  • --defaults-extra-file

    Command-Line Format --defaults-extra-file=path
    Type String
    Default Value [none]

    在读取全局文件之后读取给定文件。

  • --defaults-file

    Command-Line Format --defaults-file=path
    Type String
    Default Value [none]

    从给定文件中只读取默认选项。

  • --defaults-group-suffix

    Command-Line Format --defaults-group-suffix=string
    Type String
    Default Value [none]

    还读取具有concat(group, suffix)的组。

  • --disable-indexes

    Command-Line Format --disable-indexes

    禁用在从原生 NDB 备份中恢复数据时的索引恢复。之后,您可以使用--rebuild-indexes一次性为所有表重建索引,使用多线程构建索引,这应该比并行地为非常大表重建索引更快。

    此选项还将删除备份中指定的任何外键。

    MySQL可以打开一个NDB表,该表中有一个或多个索引无法找到,但提供查询不使用任何受影响的索引;否则,查询将被拒绝,并返回ER_NOT_KEYFILE错误。在后一种情况下,您可以通过执行类似于以下的ALTER TABLE语句来临时解决问题:

    ALTER TABLE tbl ALTER INDEX idx INVISIBLE;

    这将使MySQL忽略表tbl上的索引idx。请参阅主要键和索引,以及第10.3.12节“不可见的索引”,获取更多信息。

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

    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

  • --exclude-missing-columns

    Command-Line Format --exclude-missing-columns

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

  • --exclude-missing-tables

    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集群备份中恢复时的影响:

    表25.23:使用--exclude-*选项调用ndb_restore,并且这些选项在从NDB集群备份中恢复时的影响。

    Option Result
    --exclude-databases=db1 除了数据库db1中的所有表外,其他所有数据库的所有表都将被恢复;不恢复任何表在db1中。
    --exclude-databases=db1,db2(或--exclude-databases=db1 --exclude-databases=db2 除了数据库db1db2中的所有表外,其他所有数据库的所有表都将被恢复;不恢复任何表在db1db2中。
    --exclude-tables=db1.t1 除了数据库db1中的所有表(除去t1)外,其他所有表都将被恢复;在db1中其他的所有表也会被恢复;其他所有数据库的所有表都会被恢复。
    --exclude-tables=db1.t2,db2.t1(或--exclude-tables=db1.t2 --exclude-tables=db2.t1 所有数据库 db1 中的表,除了 t2 和所有数据库 db2 中的表,除了表 t1,都会被恢复;db1db2 中的其他任何表都不会被恢复;所有数据库中的其他表都会被恢复。

    您可以同时使用这两个选项。例如,以下命令会导致所有数据库 除了 数据库 db1db2,以及数据库 db3 中的表 t1t2 被恢复:

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

    (我们在示例中省略了其他可能需要的选项,以保持清晰简洁。)

    您可以同时使用 --include-*--exclude-* 选项,根据以下规则操作:

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

    • 所有 --include-*--exclude-* 选项都会按照传递给 ndb_restore 的顺序进行评估,从右到左。

    • 在冲突选项的情况下,第一个(从右到左)选项具有优先权。换句话说,对于给定的数据库或表,第一个选项(从右到左)会获胜。

    例如,以下选项集将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

    每个列值都由传递给此选项的字符串包围(无论数据类型如何;请参阅--fields-optionally-enclosed-by的描述)。

  • --fields-optionally-enclosed-by

    Command-Line Format --fields-optionally-enclosed-by
    Type String
    Default Value

    这个选项的字符串用于包围包含字符数据(如CHARVARCHARBINARYTEXTENUM)的列值。

  • --fields-terminated-by=char

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

    这个选项的字符串用于分隔列值。默认值是制表符字符(\t)。

  • --help

    Command-Line Format --help

    显示帮助文本并退出。

  • --hex

    Command-Line Format --hex

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

  • --ignore-extended-pk-updates

    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=db-list

    Command-Line Format --include-databases=list
    Type 字符串
    Default Value

    逗号分隔的数据库列表,用于恢复。通常与--include-tables一起使用;请参阅该选项的描述以获取更多信息和示例。

  • --include-stored-grants

    Command-Line Format --include-stored-grants

    ndb_restore默认情况下不会恢复共享用户和授权(请参阅Section 25.6.13, “Privilege Synchronization and NDB_STORED_USER”)到ndb_sql_metadata表。指定此选项将使其执行。

  • --include-tables=table-list

    Command-Line Format --include-tables=list
    Type 字符串
    Default Value

    要恢复的表的逗号分隔列表;每个表引用都必须包括数据库名称。

    当使用 --include-databases--include-tables 选项时,只有选项指定的数据库或表才会被恢复;所有其他数据库和表会被 ndb_restore 排除,不会被恢复。

    下表显示了使用 --include-* 选项调用 ndb_restore 的几个例子(为了清晰起见,省略了其他可能需要的选项),以及这些选项对从 NDB 集群备份恢复的影响:

    表 25.24 多个使用 --include-* 选项的 ndb_restore 调用及其在恢复 NDB 集群备份时的效果

    Option Result
    --include-databases=db1 仅恢复数据库 db1 中的表;忽略所有其他数据库中的表
    --include-databases=db1,db2 (或 --include-databases=db1 --include-databases=db2) 仅恢复数据库 db1db2 中的表;忽略所有其他数据库中的表
    --include-tables=db1.t1 仅恢复数据库 db1 中的表 t1;不恢复任何其他表在 db1 或任何其他数据库中
    --include-tables=db1.t2,db2.t1 (or --include-tables=db1.t2 --include-tables=db2.t1) 仅恢复数据库db1中的表t2和数据库db2中的表t1;不恢复任何其他表在db1db2或任何其他数据库中。

    您还可以同时使用这两个选项。例如,以下将导致所有数据库db1db2中的表,以及数据库db3中表t1t2的恢复(并且不恢复任何其他数据库或表):

    $> 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

    Command-Line Format --lines-terminated-by=char
    Type 字符串
    Default Value \n (linebreak)

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

  • --login-path

    Command-Line Format --login-path=path
    Type String
    Default Value [none]

    从登录文件中读取给定路径。

  • --no-login-paths

    Command-Line Format --no-login-paths

    跳过从登录路径文件中读取选项。

  • --lossy-conversions, -L

    Command-Line Format --lossy-conversions

    这个选项是为了补充--promote-attributes选项。使用--lossy-conversions允许在从备份中恢复数据时进行损失性的列值转换(类型降级或更改符号)。与MySQL复制的规则相同,关于特定类型转换当前支持的属性降级的信息,请参阅Section 19.5.1.9.2, “Replication of Columns Having Different Data Types”

    此选项还使得可以将一个NULL列恢复为NOT NULL。该列不得包含任何NULL条目;否则ndb_restore将以错误停止。

    ndb_restore在进行损失转换时报告任何数据截断的次数,仅一次地报告每个属性和列。

  • --no-binlog

    Command-Line Format --no-binlog

    此选项防止任何连接的SQL节点将由ndb_restore恢复的数据写入到它们的二进制日志中。

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

    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来覆盖此行为。

  • --ndb-connectstring

    Command-Line Format --ndb-connectstring=connection_string
    Type 字符串
    Default Value [none]

    设置连接字符串以连接到ndb_mgmd。语法:[nodeid=id;][host=]hostname[:port]。覆盖NDB_CONNECTSTRINGmy.cnf中的条目。

  • --ndb-mgm-tls

    Command-Line Format --ndb-mgm-tls=level
    Type 枚举值
    Default Value relaxed
    Valid Values

    relaxed

    strict

    设置连接到管理服务器所需的TLS支持级别;可以是relaxedstrictrelaxed(默认)意味着尝试建立TLS连接,但成功不必要求;strict意味着必须使用TLS才能连接。

  • --ndb-mgmd-host

    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

    任何设置为此选项的值都被忽略,且该选项本身什么也不做。

  • --ndb-nodeid

    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禁用。

  • --ndb-tls-search-path

    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。可以通过编译NDB集群时使用-DWITH_NDB_TLS_SEARCH_PATH来重写此值。

  • --no-defaults

    Command-Line Format --no-defaults

    不从任何选项文件(除了登录文件)中读取默认选项。

  • --nodeid=#, -n

    Command-Line Format --nodeid=#
    Type 数字
    Default Value none

    指定备份在数据节点上的节点ID;必需。

    当恢复到与备份所取的集群中不同数量的数据节点的集群时,这些信息有助于确定正确的文件集合或多个文件集合应被恢复到给定节点。 (在这种情况下,通常需要将多个文件恢复到单个数据节点上。) 请参阅恢复到不同数量的数据节点,了解更多信息和示例。

  • --num-slices=#

    Command-Line Format --num-slices=#
    Type 整数
    Default Value 1
    Minimum Value 1
    Maximum Value 1024

    当通过切片恢复备份时,此选项设置将备份划分为的切片数。这样可以允

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

    ndb_restore遇到碎片并为每个碎片分配一个碎片计数器。当通过切片进行恢复时,为每个碎片分配一个切片ID;该切片ID范围从0到1少于切片数。对于不是BLOB表的表,确定给定碎片所属的切片使用以下公式:

    [slice_ID] = [fragment_counter] % [number_of_slices]

    对于BLOB表,碎片计数器不用于;而是使用主表的ID和碎片号来代替(请记住NDB在内部将BLOB值存储在一个单独的表中)。对于给定碎片,计算切片ID的公式如下所示:

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

    因此,通过N片段的恢复意味着运行Nndb_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的集群。要执行此操作使用五片,执行以下列表中的命令集:

    1. 使用ndb_restore恢复集群元数据,如下所示:

      $> ndb_restore -b 1 -n 1 -m --disable-indexes --backup-path=/home/ndbuser/backups
    2. 将集群数据恢复到数据节点,调用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选项的说明)。

    3. 恢复索引通常可以按照以下方式执行:

      $> ndb_restore -b 1 -n 1 --rebuild-indexes --backup-path=/var/lib/mysql-cluster/BACKUP/BACKUP-1
    4. 最后,使用以下命令来恢复纪元(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核心数、内存量等,也不取决于LDM数量。

    可以在不同的数据节点上使用不同值的此选项作为恢复的一部分;这样做本身不会产生任何负面影响。

  • --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时。否则,在将这样的列值插入新列时,尾随空格会从这些列值中丢失。

    Note

    虽然可以提升CHAR列到VARCHARBINARY列到VARBINARY,但不能提升VARCHAR列到CHARVARBINARY列到BINARY

  • --print

    Command-Line Format --print

    导致ndb_restore将所有数据、元数据和日志打印到stdout。等效于同时使用--print-data--print-meta--print-log选项。

    Note

    使用--print或任何--print_*选项是进行干运行动的效果。包括一个或多个这些选项会将输出重定向到stdout;在这种情况下,ndb_restore不会尝试将数据或元数据恢复到NDB集群。

  • --print-data

    Command-Line Format --print-data

    原因 ndb_restore 将其输出直接发送到 stdout。通常与一个或多个 --tab--fields-enclosed-by--fields-optionally-enclosed-by--fields-terminated-by--hex--append 一起使用。

    TEXTBLOB 列值总是被截断。这些值在输出中将被截断到第 256 个字节。这目前无法通过使用 --print-data 来重写。

  • --print-defaults

    Command-Line Format --print-defaults

    打印程序参数列表并退出。

  • --print-log

    Command-Line Format --print-log

    使ndb_restore输出其日志到stdout

  • --print-meta

    Command-Line Format --print-meta

    将所有元数据输出到stdout

  • print-sql-log

    Command-Line Format --print-sql-log

    将SQL语句记录到stdout。使用该选项可以启用;通常情况下,此行为是禁用的。此选项在尝试记录之前检查是否有所有正在恢复的表都明确定义了主键;只有隐式主键由NDB实现的表上的查询不能转换为有效SQL。

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

  • --progress-frequency=N

    Command-Line Format --progress-frequency=#
    Type 数值
    Default Value 0
    Minimum Value 0
    Maximum Value 65535

    在备份进程中每隔 N 秒打印状态报告。默认值为 0(不打印任何状态报告)。最大值为 65535。

  • --promote-attributes, -A

    Command-Line Format --promote-attributes

    ndb_restore支持有限的属性提升,与MySQL复制中所支持的一样;也就是说,可以将备份数据从一个给定类型的列恢复到使用一个类似的、更大的类型的列。例如,可以将一个CHAR(20)列的数据恢复到一个声明为VARCHAR(20)VARCHAR(30)CHAR(30)的列;可以将一个MEDIUMINT列的数据恢复到一个类型为INTBIGINT的列。请参阅Section 19.5.1.9.2,“Replication of Columns Having Different Data Types”,了解当前支持的类型转换。

    This option also makes it possible to restore a NOT NULL column as NULL.

    属性提升由ndb_restore必须显式启用,方法如下:

    1. 准备要恢复备份的表。ndb_restore不能用来重新创建具有不同定义的表;这意味着您必须要么手动创建表,要么使用ALTER TABLE在恢复表元数据后但在恢复数据之前更改要提升的列。

    2. 使用ndb_restore时,调用带有--promote-attributes选项(短形式为-A)时恢复表数据。属性提升不会发生,如果不使用此选项,则恢复操作将以错误结束。

    在将字符数据类型与 TEXTBLOB 之间进行转换时,只有在字符类型(CHARVARCHAR)和二进制类型(BINARYVARBINARY)之间的转换可以同时进行。例如,您不能在同一次调用中将一个INT列提升到BIGINT的同时将一个VARCHAR列提升到TEXT。在ndb_restore中。

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

    When performing conversions of character or binary types to TEXT or BLOB with ndb_restore, you may notice that it creates and uses one or more staging tables named table_name$STnode_id. These tables are not needed afterwards, and are normally deleted by ndb_restore following a successful restoration.

  • --rebuild-indexes

    Command-Line Format --rebuild-indexes

    Enable multithreaded rebuilding of the ordered indexes while restoring a native NDB backup. The number of threads used for building ordered indexes by ndb_restore with this option is controlled by the BuildIndexThreads data node configuration parameter and the number of LDMs.

    在第一次运行ndb_restore时,必须使用此选项;否则,在恢复后重新构建索引时可能会出现唯一约束违规的情况。您应该在插入新行之前使用此选项;否则,有可能在尝试重建索引时插入一行导致唯一约束违规。

    默认情况下,使用LDM的数量并行化有序索引的构建。通过设置BuildIndexThreads数据节点配置参数,可以加快离线索引构建在节点和系统重新启动期间的速度;该参数对ndb_restore通过在线方式执行的索引删除和重建没有影响。

    重建唯一索引使用磁盘写入带宽进行重做日志记录和本地检查点。缺乏此带宽可能导致重做缓冲区过载或日志过载错误。在这种情况下,您可以重新运行ndb_restore --rebuild-indexes,进程将在错误发生的位置继续执行。您还可以在遇到临时错误时重复执行ndb_restore --rebuild-indexes,您可能可以通过减少--parallelism的值来停止这些错误。如果问题是空间不足,您可以增加重做日志的大小(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: 表名称。

    • col: 要更新的列名称。该列必须为INTBIGINT类型。该列也可以是但不必为UNSIGNED

    • fn: 函数名称;目前,只支持的唯一名称是offset

    • args: 函数接受的参数。目前,只支持一个参数,即要由 offset 函数添加的偏移量大小。负值也是支持的。传递给 offset 函数的参数的大小不能超过列类型的有符号变体的大小;例如,如果 col 是一个 INT 列,那么传递给 offset 函数的参数的允许范围是 -21474836482147483647(请参阅Section 13.1.2,“整数类型(精确值)- INTEGER,INT,小整数,微小整数,大整数”)。如果将偏移量应用于列会导致溢出或下溢,则恢复操作失败。这可能发生在以下情况下:例如,如果列是 BIGINT,并且选项尝试将偏移量值 8 应用于行,其中列值为 4294967291,因为 4294967291 + 8 = 4294967299 > 4294967295

      如果应用偏移量到列会导致溢出或下溢,则恢复操作失败。例如,如果列是 BIGINT,并且选项尝试将偏移量值 8 应用于行,其中列值为 4294967291,因为 4294967291 + 8 = 4294967299 > 4294967295

    这个选项可以在合并多个源实例的NDB集群(所有使用相同架构)中的数据到一个单一目标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 TABLEndb_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

    添加(或恢复)集群复制状态表的纪元信息。这对于在NDB Cluster副本上启动复制非常有用。当使用此选项时,如果已存在具有0值的id列的行,则会更新或插入该行(参见Section 25.7.9,“NDB Cluster Backups With NDB Cluster Replication”)。

  • --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启动数据节点,然后执行还原。)

  • --restore-privilege-tables

    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中多次使用。因此,可以同时从数据库名为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会将所有表和数据从数据库db1db2恢复到数据库db3

    Important

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

  • --skip-broken-objects

    Command-Line Format --skip-broken-objects

    此选项会导致 ndb_restore 忽略损坏的表格在读取一个本地 NDB 备份时,并继续还原任何剩余的表格(即使它们也损坏)。目前, --skip-broken-objects 选项只在缺少 blob parts 表格的情况下有效。

  • --skip-table-check, -s

    Command-Line Format --skip-table-check

    可以在不还原表格元数据的情况下恢复数据。默认情况下,当这样做时, ndb_restore 会在发现表格数据和表格架构之间的不匹配时失败;此选项会覆盖该行为。

    当使用ndb_restore恢复数据时,一些列定义不匹配的限制被放宽;当遇到这些类型的不匹配之一时,ndb_restore不会像以前那样停止并产生错误,而是接受数据,并将其插入目标表,同时向用户发出警告。这一行为无论是否使用选项--skip-table-check--promote-attributes。这些列定义的不同之处如下所示:

    • 不同的COLUMN_FORMAT设置(FIXEDDYNAMICDEFAULT

    • 不同的STORAGE设置(MEMORYDISK

    • 不同的默认值

    • 不同的分布式键设置

  • --skip-unknown-objects

    Command-Line Format --skip-unknown-objects

    此选项使ndb_restore在读取本地NDB备份时忽略它不认识的任何架构对象。这可以用于从运行(例如)NDB 7.6的集群恢复到运行NDB Cluster 7.5的备份。

  • --slice-id=#

    Command-Line Format --slice-id=#
    Type Integer
    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 Directory name

    使--print-data创建转储档案,一个每个表,每个命名为tbl_name.txt。它需要其参数是要保存文件的目录路径;使用.表示当前目录。

  • --timestamp-printouts

    Command-Line Format --timestamp-printouts{=true|false}
    Type 布尔值
    Default Value true

    使讯息、错误和调试日志讯息前置时间戳。

    此选项默认启用。使用--timestamp-printouts=false禁用它。

  • --usage

    Command-Line Format --usage

    显示帮助文本并退出;与--help相同。

  • --verbose=#

    Command-Line Format --verbose=#
    Type 数值
    Default Value 1
    Minimum Value 0
    Maximum Value 255

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

  • --version

    Command-Line Format --version

    显示版本信息并退出。

  • --with-apply-status

    Command-Line Format --with-apply-status

    从备份的 ndb_apply_status 表中恢复所有行(除了具有 server_id = 0 的行,该行使用 --restore-epoch 生成)。此选项要求同时使用 --restore-data

    如果备份中的 ndb_apply_status 表已经包含一个行的 server_id = 0ndb_restore --with-apply-status 将删除它。因此,我们建议您在调用ndb_restore --with-apply-status 选项之后使用ndb_restore --restore-epoch。您还可以与ndb_restore --with-apply-status 选项用于恢复集群的最后一个调用中使用的ndb_restore --with-apply-status 选项一起使用的--restore-epoch

    有关更多信息,请参阅ndb_apply_status Table

此实用程序的典型选项如下所示:

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 在哪里找到集群管理服务器(请参阅Section 25.4.3.3, “NDB Cluster Connection Strings”)。如果不使用此选项,则ndb_restore 将尝试连接到 localhost:1186 上的管理服务器。这个实用工具作为集群 API 节点运行,因此需要与集群管理服务器建立一个空闲的连接slot。这意味着必须在集群 config.ini 文件中至少有一个可以由它使用的 [api][mysqld] 部分。这是一个好主意,在 config.ini 中保留至少一个空的 [api][mysqld] 部分,不用于 MySQL 服务器或其他应用程序,以便为此目的(请参阅Section 25.4.3.7, “Defining SQL and Other API Nodes in an NDB Cluster”)。

ndb_restore可以使用--decrypt--backup-password解密一个加密的备份。必须同时指定这两个选项才能执行解密操作。请参阅START BACKUP管理客户端命令的文档,以获取创建加密备份的信息。

您可以使用ndb_restore连接到集群的验证方法是,在SHOW命令中使用ndb_mgm管理客户端。您还可以从系统shell中执行此操作,如下所示:

$> ndb_mgm -e "SHOW"

Error reporting.  ndb_restore 报告了临时和永久错误。在临时错误的情况下,它可能能够从中恢复,并报告 Restore successful, but encountered temporary error, please look at configuration 的情况。

Important

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