创建增量备份

创建增量备份

gpcrondumpgpdbrestore工具支持追加优化表(包括列存表)的增量备份和恢复。使用gpcrondump的选项--incremental来创建一个增量备份。

如果在上一次完全备份或者增量备份后在一个追加优化表或者列存表上执行了下列操作之一,增量备份将只备份它们:

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

对于分区的追加优化表,只有改变的分区会被备份。

每一次完全备份和增量备份都会备份堆表。

当追加优化表分区或者列存表中改变的总数据量小于未改变的数据时,增量备份很有效。

每次gpcrondump运行时,它会创建状态文件,其中含有数据库中每个追加优化和列存表及分区的行计数。状态文件还保存截断和alter这样的元数据操作。当用--incremental选项运行gpcrondump时,它比较当前状态和保存的状态来决定是否应该把表或分区包括在增量备份中。

一个唯一的14位数字的时间戳键用来标识组成一个增量备份集合的文件。

要创建一个增量备份或者从一个增量备份中恢复收,用户需要完整的备份集。一个完整的备份集由一个完全备份及其后创建的所有增量备份构成。在归档增量备份时,最后一次完全备份和目标增量备份之间的所有增量备份都必须被归档。用户必须归档在Master和所有Segment上创建的所有文件。

重要: 对于增量备份集,一个完全备份和相关的增量备份必须位于一个单一设备上。例如,一个备份集必须全都在一个Data Domain系统上。备份集不能有一些备份在Data Domain系统上而另一些在本地文件系统或者NetBackup系统上。
注意: 用户可以把一台Data Domain服务器用作一个NFS文件系统(不带Data Domain Boost)来执行增量备份。

改变Greenplum数据库的Segment配置会让增量备份无效。在更改了Segment配置后必须先创建和一个完全备份,才能接着创建增量备份。

增量备份实例

每个备份集都有一个键,它是一个创建备份时取得的时间小伙。例如,如果用户在2016年5月14日创建一个备份,备份集文件名会包含20160514hhmmsshhmmss表示时间:小时、分钟和秒。

对于这个例子,假定用户已经创建了数据库mytest的完全和增量备份。为了创建完全备份,使用下面的命令:

gpcrondump -x mytest -u /backupdir 

随后,在对追加优化表做了一些更改后,用下面的命令创建增量备份:

gpcrondump -x mytest -u /backupdir --incremental

当用户指定-u选项时,备份被创建在每台Greenplum数据库主机的/backupdir目录中。文件名包括下面的时间戳键。完全备份的时间戳键是2016051405453220161114064330。其他的备份是增量备份。

  • 20160514054532(完全备份)
  • 20160714095512
  • 20160914081205
  • 20161114064330(完全备份)
  • 20170114051246

要创建一个新的增量备份,用户同时需要最近的增量备份20170114051246和之前的完全备份20161114064330。还有,用户必须为该备份集中的任何增量备份指定同样的-u选项。

要用增量备份20160914081205恢复一个数据库,用户需要增量备份2016091408120520160714095512,以及完全备份20160514054532

要用增量备份20170114051246恢复mytest数据库,用户只需要这个增量备份和完全备份20161114064330。恢复命令将和这个命令相似。

gpdbrestore -t 20170114051246 -u /backupdir

对集合的增量备份

要用增量备份备份数据库表的集合,在用gpcrondump创建完全备份时用--prefix选项标识该备份集。例如,要为myschema方案中的表创建增量备份,首先创建一个带有前缀的完全备份,如myschema:
gpcrondump -x mydb -s myschema --prefix myschema

-s选项指定由myschema方案限定的表将被包括在该备份中。对备份指定表集合的更多选项请见备份表集合

一旦用户有了一个完全备份,就可以通过指定gpcrondump--incremental--prefix选项(指定为完全备份设置的前缀)为相同的表集合创建一个增量备份。增量备份会自动被限制为只考虑完全备份中的表。例如:

gpcrondump -x mydb --incremental --prefix myschema
下面的命令列出了完全备份中包括和排除的表。
gpcrondump -x mydb --incremental --prefix myschema --list-filter-tables

从增量备份恢复

在用gpdbrestore恢复一个备份时,命令行输出会显示恢复类型是增量还是完全数据库恢复。用户不必指定该备份是增量备份。例如,下面的gpdbrestore命令恢复mydb数据库最近的备份。gpdbrestore会搜索db_dumps目录来定位最近的转储并且显示有关它找到的备份的信息。
$ gpdbrestore -s mydb
...
20151015:20:10:34:002664 gpdbrestore:mdw:gpadmin-[INFO]:-------------------------------------------
20151015:20:10:34:002664 gpdbrestore:mdw:gpadmin-[INFO]:-Greenplum database restore parameters
20151015:20:10:34:002664 gpdbrestore:mdw:gpadmin-[INFO]:-------------------------------------------
20151015:20:10:34:002664 gpdbrestore:mdw:gpadmin-[INFO]:-Restore type               = Incremental Restore
20151015:20:10:34:002664 gpdbrestore:mdw:gpadmin-[INFO]:-Database to be restored    = mydb
20151015:20:10:34:002664 gpdbrestore:mdw:gpadmin-[INFO]:-Drop and re-create db      = Off
20151015:20:10:34:002664 gpdbrestore:mdw:gpadmin-[INFO]:-Restore method             = Search for latest
20151015:20:10:34:002664 gpdbrestore:mdw:gpadmin-[INFO]:-Restore timestamp          = 20151014194445
20151015:20:10:34:002664 gpdbrestore:mdw:gpadmin-[INFO]:-Restore compressed dump    = On
20151015:20:10:34:002664 gpdbrestore:mdw:gpadmin-[INFO]:-Restore global objects     = Off
20151015:20:10:34:002664 gpdbrestore:mdw:gpadmin-[INFO]:-Array fault tolerance      = f
20151015:20:10:34:002664 gpdbrestore:mdw:gpadmin-[INFO]:-------------------------------------------

Continue with Greenplum restore Yy|Nn (default=N):

在恢复备份之前,gpdbrestore会确保完全备份和其他必需的增量备份可用。通过--list-backup选项用户可以显示执行一次恢复所需的完全和增量备份集合。

如果指定了gpdbrestore的选项-q,备份类型信息会被写入到日志文件。通过gpdbrestore的选项--noplan,用户可以只恢复包含在一个增量备份中的数据。