Pivotal Greenplum® 6.9-管理员指南-管理系统-使用gpbackup和gprestore的并行备份--通过gpbackup和gprestore创建和使用增量备份

荀博
2023-12-01

通过gpbackup和gprestore创建和使用增量备份

gpbackup 和 gprestore工具支持创建AO表的增量备份以及从增量备份中恢复。增量备份会备份所有指定的堆表,并仅在表发生更改时备份AO表(包括AO、列式表)。例如,如果AO表的一行已更改,则会备份该表。对于分区的AO表,仅备份更改的叶子分区。

当AO表或表分区中已更改的数据总量,与自上次备份后没有更改的数据相比较小时,增量备份将非常有效。

当上次全量备份或增量备份之后,若对表执行了以下操作之一时,则增量备份会备份AO表:

  • ALTER TABLE
  • DELETE
  • INSERT
  • TRUNCATE
  • UPDATE
  • DROP 然后重新创建表

要从增量备份中恢复数据,您需要一个完整的增量备份集。

关于增量备份集

一个增量备份集包括以下备份:
  • 一个全量的备份。这是增量备份所基于的全量备份。
  • 增量备份集,它们捕获了自全量备份后对数据库的更改。

例如,您可以创建一个全量备份,然后创建三个每日的增量备份。全量备份和全部的三个增量备份就是备份集。有关使用增量备份集的信息,请参阅使用增量备份集的示例

创建或添加到增量备份集时, gpbackup确保使用一组一致的备份选项,创建该集中的备份,以确保可以在恢复操作中使用备份集。有关备份集一致性的信息,请参阅使用增量备份

在创建增量备份时,可以将以下选项与其他gpbackup选项包含在一起,来创建一个备份:
  • --leaf-partition-data —— 增量备份集中的全部备份均必需。
    • 创建全量备份(将作为增量备份集的基础)时必需。
    • 创建增量备份时必需。
  • --incremental —— 创建增量备份时必需。

    不能将--data-only或--metadata-only和--incremental一起使用。

  • --from-timestamp —— 可选。该选项可以和--incremental一起使用。 指定的时间戳是一个已经存在的备份。 可以是一个全量备份或增量备份。 创建的备份必须和使用--from-timestamp选项指定的备份兼容。

    如果不指定--from-timestamp,gpbackup会尝试基于gpbackup历史文件找一个兼容的备份。

    请参阅增量备份说明

使用增量备份

将增量备份添加到备份集时, gpbackup通过检查以下gpbackup选项,来确保全量备份和增量备份是一致的:
  • --dbname -数据库必须相同。
  • --backup-dir-目录必须相同。备份集、全量备份和增量备份必须位于同一位置。
  • --single-data-file -对集合中的全部备份,这个选项要么全部指定,要么全部不指定。
  • --plugin-config-如果指定了此选项,则必须为备份集中的所有备份都指定该选项。该配置必须引用相同的插件二进制文件。
  • --include-table-file, --include-schema,或者其他过滤表和schema的选项,这些必须要一致。

    检查schema筛选器时,仅检查schema名称,不检查schema中包含的对象。

  • --no-compression -如果指定了此选项,则必须为备份集中的所有备份都指定该选项。

    如果在全量备份上使用压缩,则必须在增量备份上使用压缩。备份集中的备份允许使用不同的压缩级别。对于备份,默认值为压缩级别1。

当试图将增量备份添加到备份集时,如果gpbackup 选项不一致,则备份操作失败。

有关 gpbackup 和 gprestore工具选项的信息,请参阅参考文档中的gpbackupgprestore

使用增量备份集的示例

创建备份时,每个备份都有一个时间戳。例如,如果您在2017年5月14日创建备份,则备份文件名包含 20170514hhmmsshhmmss表示时间:小时,分钟和秒。

本示例假定您已经创建了数据库mytest的两个全量备份和增量备份。为创建全量备份,您使用了以下命令:

gpbackup --dbname mytest --backup-dir /mybackup --leaf-partition-data

您使用以下命令创建了增量备份:

gpbackup --dbname mytest --backup-dir /mybackup --leaf-partition-data --incremental

您指定了 --backup-dir 选项,备份被创建在每个Greenplum数据库主机上的/mybackup目录下。

在示例中,全量备份具有时间戳记键 20170514054532 和 20171114064330。其他备份是增量备份。该示例包含两个备份集,第一个具有两个增量备份,第二个具有一个增量备份。备份从最早到最新列出。

  • 20170514054532 (完整备份)
  • 20170714095512
  • 20170914081205
  • 20171114064330 (完整备份)
  • 20180114051246
要基于最新的增量备份创建新的增量备份,必须包含与增量备份相同的--backup-dir选项以及--leaf-partition-data和--incremental选项
gpbackup --dbname mytest --backup-dir /mybackup --leaf-partition-data --incremental

您可以指定 --from-timestamp选项,以基于现有的增量或全量备份来创建增量备份。根据该示例,以下命令将第四个增量备份添加到备份集,其中包括20170914081205 作为增量备份,并使用 20170514054532 作为全量备份。

gpbackup --dbname mytest --backup-dir /mybackup --leaf-partition-data --incremental --from-timestamp 20170914081205
以下命令基于全量备份20171114064330创建增量备份集,并且与包括增量备份20180114051246的备份集分开。
gpbackup --dbname mytest --backup-dir /mybackup --leaf-partition-data --incremental --from-timestamp 20171114064330
要使用增量备份20170914081205来恢复数据库 ,您需要增量备份 20120914081205 和 20170714095512,以及全量备份 20170514054532。以下是gprestore 命令。
gprestore --backup-dir /backupdir --timestamp 20170914081205

使用gpbackup创建增量备份

gpbackup输出显示增量备份所基于的备份的时间戳。在此示例中,增量备份基于时间戳为20180802171642的备份。备份20180802171642 可以是增量备份或全量备份。

$ gpbackup --dbname test --backup-dir /backups --leaf-partition-data --incremental
20180803:15:40:51 gpbackup:gpadmin:mdw:002907-[INFO]:-Starting backup of database test
20180803:15:40:52 gpbackup:gpadmin:mdw:002907-[INFO]:-Backup Timestamp = 20180803154051
20180803:15:40:52 gpbackup:gpadmin:mdw:002907-[INFO]:-Backup Database = test
20180803:15:40:52 gpbackup:gpadmin:mdw:002907-[INFO]:-Gathering list of tables for backup
20180803:15:40:52 gpbackup:gpadmin:mdw:002907-[INFO]:-Acquiring ACCESS SHARE locks on tables
Locks acquired:  5 / 5 [================================================================] 100.00% 0s
20180803:15:40:52 gpbackup:gpadmin:mdw:002907-[INFO]:-Gathering additional table metadata
20180803:15:40:52 gpbackup:gpadmin:mdw:002907-[INFO]:-Metadata will be written to /backups/gpseg-1/backups/20180803/20180803154051/gpbackup_20180803154051_metadata.sql
20180803:15:40:52 gpbackup:gpadmin:mdw:002907-[INFO]:-Writing global database metadata
20180803:15:40:52 gpbackup:gpadmin:mdw:002907-[INFO]:-Global database metadata backup complete
20180803:15:40:52 gpbackup:gpadmin:mdw:002907-[INFO]:-Writing pre-data metadata
20180803:15:40:52 gpbackup:gpadmin:mdw:002907-[INFO]:-Pre-data metadata backup complete
20180803:15:40:52 gpbackup:gpadmin:mdw:002907-[INFO]:-Writing post-data metadata
20180803:15:40:52 gpbackup:gpadmin:mdw:002907-[INFO]:-Post-data metadata backup complete
20180803:15:40:52 gpbackup:gpadmin:mdw:002907-[INFO]:-Basing incremental backup off of backup with timestamp = 20180802171642
20180803:15:40:52 gpbackup:gpadmin:mdw:002907-[INFO]:-Writing data to file
Tables backed up:  4 / 4 [==============================================================] 100.00% 0s
20180803:15:40:52 gpbackup:gpadmin:mdw:002907-[INFO]:-Data backup complete
20180803:15:40:53 gpbackup:gpadmin:mdw:002907-[INFO]:-Found neither /usr/local/greenplum-db/./bin/gp_email_contacts.yaml nor /home/gpadmin/gp_email_contacts.yaml
20180803:15:40:53 gpbackup:gpadmin:mdw:002907-[INFO]:-Email containing gpbackup report /backups/gpseg-1/backups/20180803/20180803154051/gpbackup_20180803154051_report will not be sent
20180803:15:40:53 gpbackup:gpadmin:mdw:002907-[INFO]:-Backup completed successfully

使用gprestore从增量备份恢复

从增量备份还原时,您可以指定 --verbose 选项,以在命令行上显示在恢复操作中使用的备份。例如,以下gprestore 命令使用时间戳20180807092740增量备份来恢复备份。输出包括用于恢复数据库数据的备份。
$ gprestore --create-db --timestamp 20180807162904 --verbose
...
20180807:16:31:56 gprestore:gpadmin:mdw:008603-[INFO]:-Pre-data metadata restore complete
20180807:16:31:56 gprestore:gpadmin:mdw:008603-[DEBUG]:-Verifying backup file count
20180807:16:31:56 gprestore:gpadmin:mdw:008603-[DEBUG]:-Restoring data from backup with timestamp: 20180807162654
20180807:16:31:56 gprestore:gpadmin:mdw:008603-[DEBUG]:-Reading data for table public.tbl_ao from file (table 1 of 1)
20180807:16:31:56 gprestore:gpadmin:mdw:008603-[DEBUG]:-Checking whether segment agents had errors during restore
20180807:16:31:56 gprestore:gpadmin:mdw:008603-[DEBUG]:-Restoring data from backup with timestamp: 20180807162819
20180807:16:31:56 gprestore:gpadmin:mdw:008603-[DEBUG]:-Reading data for table public.test_ao from file (table 1 of 1)
20180807:16:31:56 gprestore:gpadmin:mdw:008603-[DEBUG]:-Checking whether segment agents had errors during restore
20180807:16:31:56 gprestore:gpadmin:mdw:008603-[DEBUG]:-Restoring data from backup with timestamp: 20180807162904
20180807:16:31:56 gprestore:gpadmin:mdw:008603-[DEBUG]:-Reading data for table public.homes2 from file (table 1 of 4)
20180807:16:31:56 gprestore:gpadmin:mdw:008603-[DEBUG]:-Reading data for table public.test2 from file (table 2 of 4)
20180807:16:31:56 gprestore:gpadmin:mdw:008603-[DEBUG]:-Reading data for table public.homes2a from file (table 3 of 4)
20180807:16:31:56 gprestore:gpadmin:mdw:008603-[DEBUG]:-Reading data for table public.test2a from file (table 4 of 4)
20180807:16:31:56 gprestore:gpadmin:mdw:008603-[DEBUG]:-Checking whether segment agents had errors during restore
20180807:16:31:57 gprestore:gpadmin:mdw:008603-[INFO]:-Data restore complete
20180807:16:31:57 gprestore:gpadmin:mdw:008603-[INFO]:-Restoring post-data metadata
20180807:16:31:57 gprestore:gpadmin:mdw:008603-[INFO]:-Post-data metadata restore complete
...

输出显示恢复操作使用了三个备份。

从增量备份还原时, gprestore还会在gprestore日志文件中列出还原操作中使用的备份。

在恢复操作期间,如果全量备份或其他所需的增量备份不可用,gprestore将显示错误。

增量备份说明

要创建增量备份,或从增量备份集恢复数据,您需要完整的备份集。归档增量备份时,必须归档完整的备份集。您必须归档在Maste和所有Segment上创建的所有文件。

每次运行gpbackup 时,该工具都会将备份信息添加到Greenplum数据库master数据目录中的历史文件gpbackup_history.yaml。 该文件包括备份选项和其他的备份信息。

如果在创建增量备份时未指定--from-timestamp选项,则gpbackup将使用具有一致选项组的最新备份。 该工具检查备份历史记录文件以查找具有一致选项组的备份。 如果工具找不到具有一致选项组的备份或历史文件不存在,则gpbackup会显示一条消息,指出必须先创建全量备份才能创建增量。

如果在创建增量备份时指定--from-timestamp选项,则gpbackup会确保正在创建的备份的选项与指定备份的选项一致。

对于备份集中的所有备份,gpbackup选项--with-stats不需要一致。 但是,要使用gprestore选项--with-stats执行恢复操作来恢复统计信息,则您指定的备份必须在创建时必须使用--with-stats。

您可以从备份集中的任何备份执行恢复操作。但是,在增量备份中捕获的、比用来恢复数据库数据的备份晚的更改,将不会被恢复。

从增量备份集中还原时,gprestore将检查备份,并从备份集中的最新版本的AO表,来恢复每一个AO表,并从最新备份恢复堆表。

增量备份集、完整备份和关联的增量备份必须位于单个设备上。例如,备份集中的备份必须全部位于文件系统上,或必须全部位于Data Domain系统上。

警告:对Greenplum数据库Segment配置的更改,会使增量备份无效。更改Segment配置(添加或删除Segment实例)之后,必须先创建全量备份,然后才能创建增量备份。
 类似资料: