通过gpbackup和gprestore创建和使用增量备份
gpbackup 和 gprestore工具支持创建AO表的增量备份以及从增量备份中恢复。增量备份会备份所有指定的堆表,并仅在表发生更改时备份AO表(包括AO、列式表)。例如,如果AO表的一行已更改,则会备份该表。对于分区的AO表,仅备份更改的叶子分区。
当AO表或表分区中已更改的数据总量,与自上次备份后没有更改的数据相比较小时,增量备份将非常有效。
当上次全量备份或增量备份之后,若对表执行了以下操作之一时,则增量备份会备份AO表:
- ALTER TABLE
- DELETE
- INSERT
- TRUNCATE
- UPDATE
- DROP 然后重新创建表
要从增量备份中恢复数据,您需要一个完整的增量备份集。
关于增量备份集
- 一个全量的备份。这是增量备份所基于的全量备份。
- 增量备份集,它们捕获了自全量备份后对数据库的更改。
例如,您可以创建一个全量备份,然后创建三个每日的增量备份。全量备份和全部的三个增量备份就是备份集。有关使用增量备份集的信息,请参阅使用增量备份集的示例。
创建或添加到增量备份集时, gpbackup确保使用一组一致的备份选项,创建该集中的备份,以确保可以在恢复操作中使用备份集。有关备份集一致性的信息,请参阅使用增量备份。
- --leaf-partition-data —— 增量备份集中的全部备份均必需。
- 创建全量备份(将作为增量备份集的基础)时必需。
- 创建增量备份时必需。
- --incremental —— 创建增量备份时必需。
不能将--data-only或--metadata-only和--incremental一起使用。
- --from-timestamp —— 可选。该选项可以和--incremental一起使用。 指定的时间戳是一个已经存在的备份。 可以是一个全量备份或增量备份。 创建的备份必须和使用--from-timestamp选项指定的备份兼容。
如果不指定--from-timestamp,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工具选项的信息,请参阅参考文档中的gpbackup和gprestore。
使用增量备份集的示例
创建备份时,每个备份都有一个时间戳。例如,如果您在2017年5月14日创建备份,则备份文件名包含 20170514hhmmss。hhmmss表示时间:小时,分钟和秒。
本示例假定您已经创建了数据库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
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
gpbackup --dbname mytest --backup-dir /mybackup --leaf-partition-data --incremental --from-timestamp 20171114064330
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从增量备份恢复
$ 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实例)之后,必须先创建全量备份,然后才能创建增量备份。