这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

创建备份

何时备份数据库

您应定期对数据库执行完整备份。此外,在以下情况下,您也应执行完整备份:

进行以下操作之前

  • 将 Vertica 升级到另一个版本。

  • 删除分区。

  • 添加、移除或替换数据库群集中的节点。

进行以下操作之后

  • 加载大量数据。

  • 添加、移除或替换数据库群集中的节点。在这种情况下,始终创建新的完整备份。

  • 恢复崩溃的群集。

如果

  • 最新备份的时期早于当前的 Ancient History Mark。

最好计划持续备份来备份数据。可以从 cron 作业或其他任务调度程序运行 Vertica vbr

您还可以备份选定对象。使用对象备份来补充(而不是替换)完整备份。备份类型中介绍了备份类型。

运行 vbr 不会影响活动的数据库应用程序。 vbr 支持在创建备份的同时,并发运行执行 DML 语句(包括 COPY、INSERT、UPDATE、DELETE 和 SELECT)的应用程序。

备份位置和内容

完整备份和对象级别备份都驻留在备份主机上,即存储备份和存档的计算机系统。

Vertica 将备份保存在特定的备份位置中,即备份主机的目录。此位置可以包含多个备份(包括完整备份和对象级别备份),其中包括关联的存档。备份也可兼容,允许您从完整的数据库备份中还原任何对象。Eon 模式数据库的备份位置必须位于 S3 上。

在开始备份之前,您必须使用 vbr init 任务准备备份位置,如下例所示:

$ vbr -t init -c full_backup.ini

有关备份位置的详细信息,请参阅设置备份位置

备份包含备份开始时备份对象的所有已提交数据。备份不包含未提交数据或备份期间提交的数据。备份不会延迟合并或加载活动。

备份 HDFS 存储位置

如果 Vertica 群集使用 HDFS 存储位置,则必须先进行一些额外配置,然后才能执行备份。请参阅备份和还原 HDFS 存储位置的要求

HDFS 存储位置仅支持完整备份和还原。您无法在使用 HDFS 存储位置的群集上执行对象备份或还原。

备份对 Vertica 节点的影响

进行备份时,备份过程可能会占用额外的存储空间。占用的空间量取决于编录的大小以及备份期间删除的任何对象。备份完成后,备份过程将释放此存储。

创建备份的最佳实践

创建备份配置文件时:

  • 创建单独的配置文件以创建完整备份或对象级别备份。

  • 在每个配置文件中使用不同的快照名称。

  • 对两种类型的备份使用同一备份主机目录位置:

    • 由于备份共享磁盘空间,因此执行还原时它们彼此兼容。

    • 每个群集节点还必须在其指定的备份主机上使用相同的目录位置。

  • 为获得最佳网络性能,每个群集节点使用一个备份主机。

  • 对每个备份节点使用一个目录,以存储后续备份。

  • 为了供今后参考,将主要的 Vertica 版本号附加到配置文件名 (mybackup9x)。

选定的备份对象可以包括一个或多个架构、表或这两者。例如,您可以将架构 S1、表 T1T2 包括在对象级备份中。可将多个备份合并成一个备份。架构级备份可与数据库备份集成(而表备份可与架构级备份集成,以此类推)。

1 - 备份类型

vbr 支持以下类型的备份:

vbr 配置文件包含 snapshotName 参数。对于不同类型的备份(包括对象级别备份中对象的不同组合),使用不同的快照名称。具有相同快照名称的备份形成了一个由 restorePointLimit 限制的时序,因此如果您为所有备份指定相同的快照名称,最终它们相互之间会出现干扰。

完整备份

完整备份是数据库编录及其架构、表和其他对象的完整副本。此类型的备份提供数据库在备份时点的一致映像。您可以将完整备份用于灾难恢复,以便还原损坏的或不完整的数据库。您还可以从完整备份中还原单个对象

当完整备份已经存在时,vbr 将备份自上次完整备份以来新增数据或更改的数据,而不是生成另一个完整的副本。您可以指定要保留的历史备份数量。

存档包括相同名称的备份的集合。每个存档可以有不同的保留策略。例如,假设 TBak 是表 T 的对象级别备份名称,并且您在每周都创建了每日备份。那么 TBak 存档包括七个备份。保留备份存档有助于您恢复到存档中任何一个已保存的备份。

对象级备份

对象级别备份包含一个或多个架构或表,或一组此类对象。将对象级备份联合起来并不会构成整个数据库。如果存在对象级别备份,您可以还原其中的所有内容或单个对象

对象级别备份包含以下对象类型:

硬链接本地备份

您可以直接在数据库节点上,更快速地对完整数据库或特定对象进行本地备份。通常,您将在执行破坏性操作之前临时使用此类备份。不要长期依赖这种备份。它无法使您免受节点故障的影响,因为数据和备份位于同一节点上。

检查点备份称为硬链接本地备份。它包括数据库编录的完整副本,以及指向相应数据文件的一组硬文件链接。您必须将硬链接本地备份保存在编录和数据库文件使用的文件系统中。

仅 Enterprise 模式支持硬链接本地备份。

2 - 创建完整备份

创建数据库备份之前,请确认满足以下条件:

  • 已使用 vbr init 任务准备了备份目录:

    $ vbr -t init -c full_backup.ini
    
  • 您的数据库正在运行。在 K-safe 数据库中,所有节点无需都处于正常运行状态。但是,出现故障的节点不会被备份。

  • 所有备份主机可正常运行且可供使用。

  • 备份主机(位于数据库群集上或其他位置)具有足够的磁盘空间来存储备份。

  • 启动 vbr 用户的用户帐户对主机备份位置上的目标目录具有写入访问权限。此用户可以是 dbadmin 或其他分配的角色。但是,您无法以 root 身份运行 vbr

  • 每个备份都具有唯一的文件名。

  • 如果要保留较早的备份,请在配置文件中将 restorePointLimit 设置为大于 1 的数字。

  • 如果您正在备份 Eon 模式数据库,您可能已满足Eon 模式数据库的要求

从终端运行 vbr。使用数据库群集启动程序节点中的数据库管理员帐户。该命令仅需要 --task backup--config-file 实参(或其缩写形式,-t-c)。

如果您的配置文件不包含数据库管理员密码,则 vbr 会提示您输入该密码。系统不会显示您键入的内容。

vbr 在调用后无需进一步的交互操作。

以下示例显示完整备份:

$ vbr -t backup -c full_backup.ini
Starting backup of database VTDB.
Participating nodes: v_vmart_node0001, v_vmart_node0002, v_vmart_node0003, v_vmart_node0004.
Snapshotting database.
Snapshot complete.
Approximate bytes to copy: 2315056043 of 2356089422 total.
[==================================================] 100%
Copying backup metadata.
Finalizing backup.
Backup complete!

默认情况下,屏幕中除了进度条之外不显示任何输出。要包含附加的进度信息,请使用 --debug 选项,其值为 1、2 或 3。

3 - 创建对象级别备份

使用对象级别备份可备份单个架构或表。对象级备份特别适用于多租户数据库站点。例如,一个国际机场可以使用多租户数据库来表示其架构中的不同航线。然后,可以使用表来维护不同类型的航线信息,其中包括“抵达 (ARRIVALS)”、“出港 (DEPARTURES)”以及“乘客 (PASSENGER)”信息。对于此类组织,通过创建特定架构的对象级备份,您可以按航线租户或任何其他重要数据分段进行还原。

若要创建一个或多个对象级备份,请创建一个配置文件,该文件用于指定备份位置、对象级备份名称以及要包括的对象的列表(一个或多个架构和表)。您可以将 includeObjectsexcludeObjects 参数与通配符一起使用,以指定所需对象。有关指定要包含对象的详细信息,请参阅包括和排除对象

有关完整备份或对象级别备份的配置文件的详细信息,请参阅示例 vbr 配置文件配置文件参考

尽管并非必须,但 Vertica 建议您首先创建一个完整备份,然后再创建任何对象级别备份。

执行备份

在您可以创建备份之前,必须先使用 vbr -init 任务准备备份目录。您还必须创建一个配置文件来指定要备份的对象。

使用数据库群集中某个节点的数据库管理员帐户,从终端运行 vbr。您无法以 root 身份运行 vbr

您可以创建对象级别备份,如下例所示。

$ vbr --task backup --config-file objectbak.ini
Preparing...
Found Database port:  5433
Copying...
[==================================================] 100%
All child processes terminated successfully.
Committing changes on all backup sites...
backup done!

命名约定

为每个对象级备份配置文件提供一个独特的描述性名称。例如,在机场航站楼,基于架构的备份配置文件使用的命名约定为:带有航线前缀,后跟进一步的描述。例如:

AIR1_daily_arrivals_backup

AIR2_hourly_arrivals_backup

AIR2_hourly_departures_backup

AIR3_daily_departures_backup

当存在数据库和对象级别备份时,您就可以对所选的备份进行恢复。

了解对象级别备份的内容

对象级别备份仅包含还原架构或表所需的元素,其中包括选定对象、依赖对象和主体对象。对象级别备份包括以下内容:

  • 存储:属于任何指定对象的数据文件

  • 元数据:包括群集拓扑、时间戳、时期、AHM 等

  • 编录片段:序列化到主体对象和依赖对象中的永久编录对象

例如,AIR2 包含的某些元素是其父架构、表、命名序列、主键和外键约束等。要创建此类备份,vbr 将保存与该表直接关联的对象。它还保存任何依赖项(如外键 (FK) 表),并创建要从中还原备份的对象映射。

在对象级别备份之后进行更改

请注意对象级别备份后所做的更改如何影响后续备份。假设您创建一个对象级别备份,然后从数据库中删除架构和表。在这种情况下,您删除的对象也会从后续备份中删除。如果您未保存对象备份的存档,则此类对象可能会永久丢失。

如果在创建表备份之后更改表名,还原备份之后,对表名的更改将失效。假设您在创建一个备份后删除了一位用户,而该用户拥有该备份中的任何选定对象或依赖对象。在这种情况下,还原备份会重新创建对象并将所有权分配给执行还原操作的用户。如果某个已还原对象的所有者仍然存在,则该用户会保留这个已还原对象的所有权。

要从备份中还原已删除的表:

  1. 将新创建的表从 t1 重命名为 t2。

  2. 还原包含 t1 的备份。

  3. 还原 t1。表 t1 和 t2 现在同时存在。

有关 Vertica 如何处理对象覆盖的信息,请参考 [misc] 中的 objectRestoreMode 参数。

完成对象备份后,K-safety 可能会提高。如果同时出现以下两种情况,则备份还原失败:

  • K-safety 提高。

  • 备份中的任何表都没有足够的投影。

更改主体对象和依赖对象

如果您先创建一个备份,然后删除一个主体对象,则还原备份会还原该主体对象。如果已还原对象的所有者也被删除,则 Vertica 会将已还原对象分配给当前 dbadmin。

您可以在 vbr 配置文件中指定 Vertica 如何处理对象覆盖。有关详细信息,请参考 [misc] 中的 objectRestoreMode 参数。

标识和自动增量序列是依赖对象,因为它们必须与其表同时存在。对象级别备份包括此类对象以及它们所依赖的表。

命名序列不是依赖对象,因为它们自主存在。在您删除使用某个命名序列的表之后,该命名序列仍然存在。在这种情况下,命名序列是一个主体对象。因此,您必须备份命名序列和表。如果在您还原表时命名序列尚不存在,则您可以重新生成序列。如果该序列存在,则 vbr 会使用它,而不会进行修改。如果您还原完整数据库,然后将表备份还原到较新的时期,则序列值可能会重复。

考虑约束引用

当数据库对象通过约束进行关联时,您必须将它们一起备份。例如,如果某架构所含表的约束仅引用该架构中的表,则可以对此架构进行备份。但是,如果某架构包含的表具有另一个架构中某个表的 FK/PK 约束,则无法对此架构进行备份。要备份第二个表,您必须将另一个架构包括在选定对象的列表中。

对象级别备份的配置文件

vbr 会自动将具有不同备份名称但备份位置相同的配置进行关联。

始终创建一个群集范围内的配置文件以及一个或多个指向同一备份位置的对象级配置文件。由于各个备份之间的存储是共享的,因此相同数据不会存在多个副本。对于对象级别备份,使用相同的备份位置会使 vbr 遇到较少的 OID 冲突预防技巧。避免 OID 冲突预防可以减少还原备份时出现的问题。

使用具有相同备份位置的群集和对象配置文件时,vbr 会包括附加配置来确保在完成完整群集还原后可以使用对象级别备份。还原完整群集的一种方法是使用完整数据库备份来启动群集。群集再次处于运行状态后,您即可还原架构和表的最近对象级别备份。

尝试使用对象级别配置文件还原完整数据库失败,导致以下错误:

VMart=> /tmp/vbr --config-file=Table2.ini -t restore
Preparing...
Invalid metadata file. Cannot restore.
restore failed!

有关详细信息,请参阅从对象级别备份中还原所有对象

备份时期

每个备份都包括可以将其内容还原到的时期。当 vbr 还原数据时,Vertica 会更新到当前时期。

vbr 会在错误出现和备份失败之前尝试创建对象级别备份五次。

4 - 创建硬链接本地备份

您可以使用 hardLinkLocal 选项创建具有本地数据库主机上的硬文件链接的完整备份或对象级别备份。

创建硬链接本地备份可以为远程主机备份提供以下优势:

  • 速度更快:硬链接本地备份要比远程主机备份的速度快得多。备份时,如果备份目录与数据库目录位于同一文件系统上,则 vbr 不会复制文件。

  • 网络活动更少:硬链接本地备份可最大限度减少网络负载,因为它不需要通过重新同步操作将文件复制到远程备份主机。

  • 占用的磁盘空间更少:备份包括编录副本和硬文件链接。因此,本地备份使用的磁盘空间明显低于具有数据库数据文件副本的备份。但是,每次运行 vbr 时,硬链接本地备份都会保存编录的完整副本。因此,一段时间后磁盘空间将随着编录大小的增加而增加。

硬链接本地备份在实验设计和开发周期期间很有用。数据库设计和开发人员可以在设计和开发阶段定期创建架构和表的硬链接本地对象备份。如果新的开发工作失败,开发人员可以从备份还原一个或多个对象。

计划硬链接本地备份

如果您计划将硬链接本地备份用作标准站点过程,请对数据库和硬件配置进行相应的设计。考虑将每个节点的所有数据文件存储到一个文件系统中。此类配置具有自动为硬链接本地备份做好设置准备的优势。

指定备份目录位置

配置文件的 backupDir 参数会指定顶级备份目录的位置。硬链接本地备份要求备份目录要位于与数据库数据相同的 Linux 文件系统中。Linux 操作系统无法创建指向其他文件系统的硬文件链接。

请勿在数据库数据存储位置创建硬链接本地备份目录。例如,最佳做法是,数据库数据目录不应位于文件系统的顶级,如以下示例所示:

/home/dbadmin/data/VMart/v_vmart_node0001

相反,Vertica 建议在数据库级别之上为数据添加其他子目录,例如以下示例:

/home/dbadmin/data/dbdata/VMart/v_vmart_node0001

然后,您可以创建硬链接本地备份子目录,将其与您刚刚创建的数据目录配对,例如以下示例:

/home/dbadmin/data/backups
/home/dbadmin/data/dbdata

指定硬链接备份位置时,请确保在将 hardLinkLocal=True 参数添加到配置文件时避免以下常见错误:

创建备份

在创建 Enterprise 模式数据库的完整硬链接本地数据库备份之前,请验证以下内容:

  • 您的数据库正在运行。所有节点无需在 K-safe 数据库中处于正常运行状态,vbr 即可运行。但请注意,出现故障的节点不会被备份。

  • 启动 vbr 的用户帐户(dbadmin 或其他)具有目标备份目录的写入权限。

Eon 模式不支持硬链接备份。

当您创建完整或对象级别硬链接本地备份时,备份包含以内容:

使用数据库群集中某个节点的数据库管理员帐户,从终端运行 vbr 脚本。您无法以 root 身份运行 vbr

硬链接备份使用与其他备份相同的 vbr 实参。将备份配置为硬链接备份的操作完全在配置文件中执行。以下示例显示语法:

$ vbr --task backup --config fullbak.ini

为外部介质存储创建硬链接本地备份

您可以将硬链接本地备份用作临时机制来备份到磁带或其他形式的存储介质。以下步骤介绍了如何通过简化的方法来保存和还原磁带存储中的硬链接本地备份:

  1. 复制现有配置文件或示例 vbr 配置文件中所述的示例之一,以此创建配置文件。

  2. 编辑配置文件(本例中为 localbak.ini),使其在 [Transmission] 部分中包含 hardLinkLocal=True 参数。

  3. 使用配置文件运行 vbr

    $ vbr --task backup --config-file localbak.ini
    
  4. 使用一个单独的进程(而非 vbr)将硬链接本地备份目录复制到磁带或其他外部介质。

  5. 如果数据库损坏,将磁带中的备份文件传输到原始备份目录,并按照还原硬链接本地备份中的说明进行还原。

还原硬链接本地备份需要一些额外的(手动)步骤。请勿使用其来代替定期完整备份(创建完整备份)。

硬链接本地备份和灾难恢复

硬链接本地备份的可靠性完全取决于存储这些备份的磁盘。如果本地磁盘损坏,硬链接本地备份也会损坏。在这种情况下,您就无法从硬链接本地备份中还原数据库,因为它也会损坏。

所有站点都应该在外部维护完整备份以便用于灾难恢复,因为硬链接本地备份并未实际复制任何数据库文件。

5 - 增量备份或重复备份

作为最佳做法,Vertica 建议您在数据库内容出现明显差异时经常备份。在发生了显著修改数据库的任何事件(如执行重新平衡)之后,始终执行备份。将具有明显差异的多个备份混合在一起,将会降低数据的 K-safety。例如,如果多个备份均属于同一存档,建议不要在重新平衡之前和之后进行备份。

每次使用同一配置文件备份数据库时,vbr 均会创建一个额外备份,并且可能会移除最旧的备份。备份操作将复制新的存储容器。这些容器可能包括:

  • 上次执行数据库备份时存在的数据

  • 自上次完整备份以来的新增数据和更改的数据

使用配置文件中的 restorePointLimit 参数,可增加存储的备份数。如果备份任务可能导致超出此限制,vbr 会在成功备份后删除最旧的备份。

当您运行备份任务时,vbr 会首先在指定位置创建新的备份,这可能会暂时超出限制。然后,它检查备份数是否超过 restorePointLimit 的值,在必要时删除最旧的备份,直到剩下的数量达到 restorePointLimit 为止。如果请求的备份失败或中断,vbr 不会删除任何备份。

还原数据库时,您可以选择从任何保留的备份(而不是最近的备份)进行还原。因此,如果您希望需要访问较旧的备份,请提高限制。