使用gpbackup和gprestore创建增量备份

使用gpbackup和gprestore创建增量备份

gpbackupgprestore工具支持创建追加优化表的增量备份以及从增量备份还原。 只有表被更改时,增量备份才会备份所有指定的堆表和追加优化的表(包括追加优化的,面向列的表)。 例如,如果追加优化表的行已更改,则会备份该表。 对于分区的追加优化表,仅备份更改的叶子分区。

当自上次备份以来,追加优化表更或分区表更改的数据与未更改的数据相比量很小的时候,增量备份是高效的。

仅当在上次全量备份或增量备份后对表执行以下操作之一时,增量备份才会备份追加优化表:

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

要从增量备份还原数据,您需要一个完整的增量备份集。

关于增量备份集

一个增量备份集包含如下备份:
  • 一个全量的备份。这是增量备份基于的全量备份。
  • 捕获全量备份后数据库的增量备份集。

例如:创建一个全量备份,然后创建三个天级增量备份。 全量备份和全部三个增量备份就是备份集。 关于增量备份更多信息,请参考使用增量备份集的例子

创建或添加到增量备份集时,gpbackup可确保使用一组一致的备份选项创建集合中的备份,以确保可以在还原操作中使用备份集。 关于备份集合一致性的信息,参考使用增量备份

创建增量备份时,包含这些选项与其他gpbackup选项一起创建备份:
  • --leaf-partition-data - 增量备份集中的所有备份都需要。
    • 创建全量备份时必需,该备份将作为增量备份集的基备份。
    • 创建增量备份时必须。
  • --incremental - 创建增量备份时必须。

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

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

    如果不指定--from-timestampgpbackup会尝试基于gpbackup历史文件找一个兼容的备份。 参考增量备份说明

使用增量备份

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

    当检查schema筛选时,只检查schema名字,不检查schema里包含的对象。

  • --no-compression - 如果这个选项被指定,必须在备份集中所有的备份中都要指定。

    如果在全量备份上使用压缩,则必须在增量备份上使用压缩。 备份集中的备份允许不同的压缩级别。

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

关于gpbackupgprestore工具选项信息, 参考Greenplum数据库工具指南中的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选项时,备份被创建在每个数据库主机的/mybackup目录里。

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

  • 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还原数据库, 需要增量备份2012091408120520170714095512, 以及全量备份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将显示错误。

增量备份说明

要创建增量备份或从增量备份集还原数据,您需要完整的备份集。 存档增量备份时,必须存档完整的备份集。 您必须归档在master和所有segment上创建的所有文件。

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

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

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

对于备份集中的所有备份,gpbackup选项--with-stats不需要相同。 但是,要使用gprestore选项--with-stats执行还原操作以还原统计信息,您指定的备份必须在创建备份时必须使用--with-stats

您可以从备份集中的任何备份执行还原操作。 但是,将不会还原在备份用于还原数据库数据之后的增量备份中捕获的更改。

从增量备份集还原时,gprestore会检查备份并从备份集中最新版本的追加优化表中还原每个追加优化表,并从最新备份还原堆表。

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

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