创建增量备份
创建增量备份
gpcrondump和gpdbrestore工具支持追加优化表(包括列存表)的增量备份和恢复。使用gpcrondump的选项--incremental来创建一个增量备份。
如果在上一次完全备份或者增量备份后在一个追加优化表或者列存表上执行了下列操作之一,增量备份将只备份它们:
- ALTER TABLE
- DELETE
- INSERT
- TRUNCATE
- UPDATE
- DROP然后重建该表
对于分区的追加优化表,只有改变的分区会被备份。
每一次完全备份和增量备份都会备份堆表。
当追加优化表分区或者列存表中改变的总数据量小于未改变的数据时,增量备份很有效。
每次gpcrondump运行时,它会创建状态文件,其中含有数据库中每个追加优化和列存表及分区的行计数。状态文件还保存截断和alter这样的元数据操作。当用--incremental选项运行gpcrondump时,它比较当前状态和保存的状态来决定是否应该把表或分区包括在增量备份中。
一个唯一的14位数字的时间戳键用来标识组成一个增量备份集合的文件。
要创建一个增量备份或者从一个增量备份中恢复收,用户需要完整的备份集。一个完整的备份集由一个完全备份及其后创建的所有增量备份构成。在归档增量备份时,最后一次完全备份和目标增量备份之间的所有增量备份都必须被归档。用户必须归档在Master和所有Segment上创建的所有文件。
改变Greenplum数据库的Segment配置会让增量备份无效。在更改了Segment配置后必须先创建和一个完全备份,才能接着创建增量备份。
增量备份实例
每个备份集都有一个键,它是一个创建备份时取得的时间小伙。例如,如果用户在2016年5月14日创建一个备份,备份集文件名会包含20160514hhmmss。hhmmss表示时间:小时、分钟和秒。
对于这个例子,假定用户已经创建了数据库mytest的完全和增量备份。为了创建完全备份,使用下面的命令:
gpcrondump -x mytest -u /backupdir
随后,在对追加优化表做了一些更改后,用下面的命令创建增量备份:
gpcrondump -x mytest -u /backupdir --incremental
当用户指定-u选项时,备份被创建在每台Greenplum数据库主机的/backupdir目录中。文件名包括下面的时间戳键。完全备份的时间戳键是20160514054532和20161114064330。其他的备份是增量备份。
- 20160514054532(完全备份)
- 20160714095512
- 20160914081205
- 20161114064330(完全备份)
- 20170114051246
要创建一个新的增量备份,用户同时需要最近的增量备份20170114051246和之前的完全备份20161114064330。还有,用户必须为该备份集中的任何增量备份指定同样的-u选项。
要用增量备份20160914081205恢复一个数据库,用户需要增量备份20160914081205和20160714095512,以及完全备份20160514054532。
要用增量备份20170114051246恢复mytest数据库,用户只需要这个增量备份和完全备份20161114064330。恢复命令将和这个命令相似。
gpdbrestore -t 20170114051246 -u /backupdir
对集合的增量备份
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 -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,用户可以只恢复包含在一个增量备份中的数据。