vertica备份与恢复(一)
关于vertica备份与恢复的一系列文章翻译整理自:Vertica Backup and Restore: What’s Your Use Case?
本篇博文主要介绍当备份集群和恢复集群规模相同的使用场景。
翻译整理自:Copy and Restore Data from a Vertica Cluster to a Backup
文档名词解释
源集群:执行备份的数据库集群。
目标集群:执行恢复的数据库集群。
说明:当原集群可用时,源集群和目标集群通常是同一个集群。
vertica集群备份与恢复
Vertica群集和备份位置之间创建备份和还原数据,有以下几种使用方式:
- 完全备份进行完全还原
创建整个Vertica数据库的备份并还原整个Vertica数据库。 - 从完全备份中还原特定表
创建整个Vertica数据库的备份,并仅还原特定表。 - 从部分备份还原表
创建特定表的备份并还原特定表。 - 并行表还原
创建原始表和当前表的备份以比较和协调原始表和已还原表。
备份类型
备份类型 | 局限性 |
---|---|
完全备份和还原 | 完全备份是数据库目录,schema,表和其他对象的完整副本。这种备份类型在备份发生时提供了完整的数据库镜像。 |
对象级备份和还原 | 对象级备份由一个或多个schema或表或一组此类对象组成。对象级备份的部分不包含整个数据库。 |
硬链接本地备份和还原 | 硬链接本地备份可以是完全备份或对象级备份。备份由数据库目录的完整副本和指向相应数据文件的一组硬文件链接组成。 |
备份配置文件
在vertica 9.1.x版本中,备份与恢复的示例配置文件位于安装后的/opt/vertica/share/vbr/example_configs
目录下,该目录下有针对不同备份与恢复方法的示例文件,可参考其中的README文件进行选择使用。
备份与恢复的使用流程通常是:
1.修改备份配置文件
2.执行vbr --init --config-file backup_snapshot.ini
初始化备份位置
3.执行vbr --backup --config-file backup_snapshot.ini
进行备份
4.在进行恢复时,执行vbr --restore --config-file backup_snapshot.ini
进行备份
关于vbr的更多参数,参考vbr -h
全量备份与全量还原
使用场景一般为:
- 数据库集群受到灾难的破坏,导致群集完全损坏。
- 您的数据库遇到多节点,不可恢复的损坏,导致数据完全丢失。
使用该场景的先决条件:
- 目标群集必须具有与源群集相同的节点数。
- 目标集群必须具有与源集群相同的IP地址,dbadmin用户和数据库名称。
- 源群集和目标群集必须具有相同的Vertica版本。
- 您必须已经在备份位置使用备份配置文件创建了数据库的完整备份。
示例
执行全量备份:
$ /opt/vertica/bin/vbr.py -t backup --config-file backup_snapshot.ini
Starting backup of database mydatabase.
Participating nodes: v_mydatabase_node0001, v_mydatabase_node0002.
Snapshotting database.
Snapshot complete.
Approximate bytes to copy: 348431103 of 348431103 total.
Copying backup metadata.
Finalizing backup.
Backup complete!
提示:如果您在不同时间备份数据库,Vertica会记录每个备份之间的差异(即创建增量备份)。每个时间点备份都称为还原点。
要执行完全还原,请按照下列步骤操作:
- 在目标集群上,创建一个空数据库,该数据库具有相同数量的节点,节点名称,数据库名称,dbadmin用户和IP地址。
$ admintools -t create_db -d mydatabase -s v_mydatabase_node0001,v_mydatabase_node0002
$ admintools -t stop_db -d mydatabase
- 在目标群集上,创建备份数据库的完整还原。
$ /opt/vertica/bin/vbr.py -t restore --archive 20150914_150023 --config-file backup_snapshot.ini
Starting full restore of database mydatabase.
Participating nodes: v_mydatabase_node0001, v_mydatabase_node0002.
Restoring from restore point: backup_snapshot_20150914_150023
Syncing data from backup to cluster nodes.
Restoring catalog.
Restore complete!
提示:可以通过指定参数–archive来指定还原点。
完全备份和完全还原的优点和局限性
优点 | 局限性 |
---|---|
1.可以在运行时备份数据库 2.可以进行多个增量备份 3.可以从完整的数据库丢失中恢复 4.如果没有重大数据更改,请定期进行快速增量备份。 | 1.备份在每个表上使用一个U锁,以防止Tuple Mover删除旧容器; 2.要还原目标数据库,必须将其关闭; 3.要还原数据库,源群集和目标群集必须具有相同的:节点数,IP地址,数据库名称和dbadmin用户,Vertica版本 |
从完全备份中还原特定表
假设您不小心truncate了一个表,恢复整个数据库可能会导致上次备份后添加的所有数据丢失。在这种情况下,从完全备份中还原特定表是最合适的做法。
先决条件:
- 目标群集必须具有与备份群集相同的节点数。
- 目标集群必须具有与源集群相同的IP地址,dbadmin用户和数据库名称。
- 您必须已经在备份位置使用备份配置文件创建了数据库的完整备份。
如何从完整备份执行单表还原
如上一节所示,您必须已经创建了数据库的完整备份。假设完全备份后的某个时候,您意外地truncate了store_sales表。
=> SELECT COUNT(*) FROM STORE.STORE_SALES;
COUNT
---------
5000000
=> TRUNCATE TABLE STORE.STORE_SALES;
TRUNCATE TABLE
接下来,假设您在完全备份之后添加了数据或表。出于本示例的目的,让我们创建一个名为的新表table_order。
=> CREATE TABLE TABLE_ORDER (I INT);
CREATE TABLE
=> INSERT INTO TABLE_ORDER VALUES (1);
OUTPUT
--------
1
=> COMMIT;
COMMIT
如果执行完全还原到上一次完全备份的时间点,则会丢失新数据,即table_order。您要恢复的是被truncate的表,而不是整个数据库。在这种情况下,您将执行表还原以仅还原truncate的表。这样,您不会丢失新添加的数据。
此示例显示了它如何工作:
在源群集上,仅从完整备份中还原被截断的store_sales表。
$ /opt/vertica/bin/vbr.py -t restore --archive 20150914_195908 --config-file backup_snapshot.ini --restore-objects "store.store_sales"
Starting object restore of database mydatabase.
Participating nodes: v_mydatabase_node0001,v_mydatabase_node0002.
Objects to restore: store.store_sales.
Restoring from restore point: backup_snapshot_20150914_195908
Loading snapshot catalog from backup.
Extracting objects from catalog.
Syncing data from backup to cluster nodes.
Finalizing restore.
Restore complete!
store_sales已从上次完整备份中还原了,且对象级还原未删除表table_order。
=> SELECT COUNT(*) FROM STORE.STORE_SALES;
COUNT
---------
5000000
The table_order is unaffected
=> SELECT * FROM TABLE_ORDER;
I
---
1
注意:在某些情况下,要还原的表具有主键或外键约束。为了保持引用完整性,请确保您还原关联约束的表。
完全备份和部分还原的优点和局限性
优点 | 局限性 |
---|---|
1.可以进行多个增量备份; 2.恢复特定的表;3.可以在数据库启动并运行时还原特定表; 4.如果没有重大数据更改,则可以定期进行增量备份;5.比完整的数据库还原更快。 | 要执行还原,源群集和目标群集必须具有相同的功能:节点数,IP地址,数据库名称和dbadmin用户,Vertica版本 |
从部分备份还原表
假设您的数据库包含多个数据不变的表,例如Products。但是,其他表(例如Sales)经常更改。部分备份和还原允许您仅备份和还原数据库的特定表。
先决条件:
- 目标群集必须具有与源群集相同的节点数。
- 目标集群必须具有与源集群相同的IP地址,dbadmin用户和数据库名称。
- 您必须已经在备份位置使用备份配置文件创建了数据库的完整备份。
示例
在源群集上,指定要备份的表。本示例说明如何创建表store.store_sales和的备份public.new_table:
$ cat objectbak.ini
[Misc]
snapshotName = objectbak
restorePointLimit = 5
objects = store.store_sales,public.new_table
objectRestoreMode = createOrReplace
[Database]
dbName = mydatabase
dbUser = dbadmin
dbPromptForPassword = False
[Transmission]
[Mapping]
v_mydatabase_node0001 = host1:/vertica/data/objbackup
v_mydatabase_node0002 = host1:/vertica/data/objbackup
在源群集上,执行两个表的备份。
$ /opt/vertica/bin/vbr.py -t backup --config-file objectbak.ini
Starting backup of database mydatabase.
Objects: ['public.new_table', 'store.store_sales']
Participating nodes: v_mydatabase_node0001, v_mydatabase_node0002.
Snapshotting database.
Snapshot complete.
Approximate bytes to copy: 51 of 108630328 total.
Copying backup metadata.
Finalizing backup.
Backup complete!
如果您有数据库特定表的备份,则可以执行部分还原。这个例子说明如何只恢复表store.store_sales。
$ /opt/vertica/bin/vbr.py -t restore --config-file objectbak.ini --restore-objects "store.store_sales"
Starting object restore of database mydatabase.
Participating nodes: v_mydatabase_node0001,v_mydatabase_node0002.
Objects to restore: store.store_sales.
Restoring from restore point: objectbak_20150914_203903
Loading snapshot catalog from backup.
Extracting objects from catalog.
Syncing data from backup to cluster nodes.
Finalizing restore.
Restore complete!
从部分备份还原表的优点和局限性
优点 | 局限性 |
---|---|
1.当数据库启动并运行时,可以进行备份;2.如果没有重大更改,则可以定期进行增量备份;3.恢复特定的表;4.比完全备份更快; 5.在备份位置节省磁盘空间;6.恢复过程中其他表中的数据不会丢失 | 1.要执行还原,源群集和目标群集必须具有相同的功能:节点数,IP地址,数据库名称和dbadmin用户,Vertica版本;2.此操作仅适用于表和分区 |
并行表恢复
假设在一个星期一的早晨,您了解到周末进行的工作中有9个通过了,有1个失败了。失败的作业以不可预测的方式修改了数据。现在,您想将现有数据与星期五数据的备份进行比较,以确定差异。
先决条件:
- 目标群集必须具有与备份群集相同的节点数。
- 目标集群必须具有与源集群相同的IP地址,dbadmin用户和数据库名称。
- 必须已经在备份位置使用备份配置文件创建了数据库的完整备份。
示例
示例的大概意思是,修改当前表的名称,然后再执行还原,以比较现有表和原有表的差异。
重命名现有store_sales表:
=> ALTER TABLE STORE.STORE_SALES RENAME TO STORE_SALES_ORIGINAL;
ALTER TABLE
=> ALTER PROJECTION STORE.STORE_SALES_SUPER RENAME TO STORE_SALES_ORIGINAL_SUPER;
ALTER PROJECTION
恢复之前备份的表store_sales:
$ /opt/vertica/bin/vbr.py -t restore --config-file objectbak.ini --restore-objects "store.store_sales"
Starting object restore of database mydatabase.
Participating nodes: v_mydatabase_node0001,v_mydatabase_node0002.
Objects to restore: store.store_sales.
Restoring from restore point: objectbak_20150914_203903
Loading snapshot catalog from backup.
Extracting objects from catalog.
Syncing data from backup to cluster nodes.
Finalizing restore.
Restore complete!
执行上述命令后,表store_sales_original和store_sales均存在。
现在,您可以检查失败作业前后的数据。您可以比较两个表,并使用正确的数据更新恢复的store_sales表。
并行备份和还原的优点和局限性
优点 | 局限性 |
---|---|
1.检索现有表的备份;2.在活动表和备份表之间执行操作;3.备份后,原始表和还原表均可用 | 1.要执行还原,源群集和目标群集必须具有相同的功能:节点数,IP地址,数据库名称和dbadmin用户,Vertica版本;2.此操作仅适用于表和分区 |