在开始备份之前,请确保集群已正确配置以执行备份。(请参阅 第 25.6.8.3 节 “NDB 集群备份的配置”。)
START BACKUP
命令用于创建备份,其语法如下所示
START BACKUP [backup_id]
[encryption_option]
[wait_option]
[snapshot_option]
encryption_option:
ENCRYPT [PASSWORD=password]
password:
{'password_string' | "password_string"}
wait_option:
WAIT {STARTED | COMPLETED} | NOWAIT
snapshot_option:
SNAPSHOTSTART | SNAPSHOTEND
连续备份会自动按顺序标识,因此 backup_id
(大于或等于 1 的整数)是可选的;如果省略,则使用下一个可用值。如果使用现有的 backup_id
值,则备份将失败并显示错误 备份失败:文件已存在。如果使用,backup_id
必须紧跟在 START BACKUP
关键字之后,在使用任何其他选项之前。
START BACKUP
支持使用 ENCRYPT PASSWORD=
创建加密备份。password
password
必须满足以下所有要求
使用任何可打印的 ASCII 字符,但
!
、'
、"
、$
、%
、\
和^
除外长度不超过 256 个字符
用单引号或双引号括起来
使用 ENCRYPT PASSWORD='
时,每个数据节点写入的备份数据记录和日志文件都使用从用户提供的 password
'password
和随机生成的盐派生的密钥进行加密,使用密钥派生函数 (KDF),该函数采用 PBKDF2-SHA256 算法为该文件生成对称加密密钥。此函数具有如下所示的形式
key = KDF(random_salt, password)
然后使用如此生成的密钥使用 AES 256 CBC 内联加密备份数据,并使用对称加密来加密备份文件集(使用生成的密钥)。
NDB 集群 从不 保存用户提供的密码或生成的加密密钥。
可以从 encryption_option
中省略 PASSWORD
选项。在这种情况下,管理客户端会提示用户输入密码。
可以使用 PASSWORD
设置空密码(''
或 ""
),但不建议这样做。
可以使用以下任何命令解密加密备份
ndbxfrm
--decrypt-password=
password
input_file
output_file
ndb_print_backup_file
-P
password
file_name
ndbxfrm
--decrypt-password-from-stdin
input_file
output_file
ndb_print_backup_file
--backup-password-from-stdin
file_name
ndb_mgm
--backup-password-from-stdin
--execute "START BACKUP ..."
有关更多信息,例如可能需要的其他选项,请参阅这些程序的说明。
如以下列表所示,wait_option
可用于确定在发出 START BACKUP
命令后何时将控制权返回给管理客户端
WAIT COMPLETED
是默认值。
snapshot_option
可用于确定备份是与发出 START BACKUP
时的集群状态匹配,还是与备份完成时的集群状态匹配。SNAPSHOTSTART
会导致备份与备份开始时的集群状态匹配;SNAPSHOTEND
会导致备份反映备份完成时的集群状态。SNAPSHOTEND
是默认值,与先前 NDB 集群版本中的行为相匹配。
如果将 SNAPSHOTSTART
选项与 START BACKUP
一起使用,并且启用了 CompressedBackup
参数,则只会压缩数据文件和控制文件,而不会压缩日志文件。
如果同时使用了 wait_option
和 snapshot_option
,则可以按任意顺序指定它们。例如,假设没有 ID 为 4 的现有备份,则以下所有命令均有效
START BACKUP WAIT STARTED SNAPSHOTSTART
START BACKUP SNAPSHOTSTART WAIT STARTED
START BACKUP 4 WAIT COMPLETED SNAPSHOTSTART
START BACKUP SNAPSHOTEND WAIT COMPLETED
START BACKUP 4 NOWAIT SNAPSHOTSTART
创建备份的过程包括以下步骤
启动管理客户端(ndb_mgm)(如果尚未运行)。
执行
START BACKUP
命令。这将生成几行输出,指示备份的进度,如下所示ndb_mgm> START BACKUP Waiting for completed, this may take several minutes Node 2: Backup 1 started from node 1 Node 2: Backup 1 started from node 1 completed StartGCP: 177 StopGCP: 180 #Records: 7362 #LogRecords: 0 Data: 453648 bytes Log: 0 bytes ndb_mgm>
Backup backup_id started from node node_id
backup_id
是此特定备份的唯一标识符。此标识符将保存在集群日志中(如果未另行配置)。node_id
是与数据节点协调备份的管理服务器的标识符。在备份过程的这一点上,集群已收到并处理了备份请求。这并不意味着备份已完成。此语句的示例如下所示Node 2: Backup 1 started from node 1
管理客户端使用如下消息指示备份已开始
Backup backup_id started from node node_id completed
与备份已开始的通知一样,
backup_id
是此特定备份的唯一标识符,node_id
是与数据节点协调备份的管理服务器的节点 ID。此输出附带其他信息,包括相关的全局检查点、已备份的记录数和数据大小,如下所示Node 2: Backup 1 started from node 1 completed StartGCP: 177 StopGCP: 180 #Records: 7362 #LogRecords: 0 Data: 453648 bytes Log: 0 bytes
还可以通过使用 -e
或 --execute
选项调用 ndb_mgm 从系统 shell 执行备份,如以下示例所示
$> ndb_mgm -e "START BACKUP 6 WAIT COMPLETED SNAPSHOTSTART"
以这种方式使用 START BACKUP
时,必须指定备份 ID。
默认情况下,集群备份在每个数据节点上的 DataDir
的 BACKUP
子目录中创建。可以使用 BackupDataDir
配置参数在 config.ini
文件中为一个或多个数据节点单独覆盖此设置,或为所有集群数据节点覆盖此设置。为具有给定 backup_id
的备份创建的备份文件存储在备份目录中名为 BACKUP-
的子目录中。backup_id
启动管理客户端。
执行以下命令
ndb_mgm> ABORT BACKUP backup_id
数字
backup_id
是备份的标识符,该标识符包含在备份开始时管理客户端的响应中(在消息Backup
中)。backup_id
started from nodemanagement_node_id
管理客户端使用
Abort of backup
确认中止请求。backup_id
ordered注意此时,管理客户端尚未收到集群数据节点对此请求的响应,并且备份实际上尚未中止。
中止备份后,管理客户端会以类似于以下所示的方式报告此事实
Node 1: Backup 3 started from 5 has been aborted. Error: 1321 - Backup aborted by user request: Permanent error: User defined error Node 3: Backup 3 started from 5 has been aborted. Error: 1323 - 1323: Permanent error: Internal error Node 2: Backup 3 started from 5 has been aborted. Error: 1323 - 1323: Permanent error: Internal error Node 4: Backup 3 started from 5 has been aborted. Error: 1323 - 1323: Permanent error: Internal error
在此示例中,我们展示了一个包含 4 个数据节点的集群的示例输出,其中要中止的备份的序列号为
3
,并且集群管理客户端连接到的管理节点的节点 ID 为5
。第一个完成中止备份任务的节点报告说,中止的原因是用户请求。(其余节点报告说,由于未指定的内部错误而中止了备份。)注意无法保证集群节点以任何特定顺序响应
ABORT BACKUP
命令。Backup
消息表示备份已终止,并且与该备份相关的所有文件已从集群文件系统中删除。backup_id
started from nodemanagement_node_id
has been aborted
也可以使用以下命令从系统 shell 中止正在进行的备份
$> ndb_mgm -e "ABORT BACKUP backup_id"
如果在发出 ABORT BACKUP
命令时没有 ID 为 backup_id
的备份正在运行,则管理客户端不会做出任何响应,集群日志中也不会指示发送了无效的中止命令。