恢复到不同的Greenplum系统配置
要使用gpdbrestore执行并行恢复操作,正在恢复的系统必须具有和被备份的系统相同的配置。要把数据库对象和数据恢复到一种不同的系统配置(例如一个具有更多Segment的系统)中,需要通过Greenplum的Master装载并行备份文件来恢复。要执行一次非并行恢复,必须有:
- 一个由gpcrondump操作创建的完整备份集。Master的备份文件含有创建数据库对象的DDL。Segment的备份文件含有数据。
- 一个运行着的Greenplum数据库系统。
- 要恢复到其中的数据库在系统中存在。
Segment转储文件对每个表包含一个COPY命令,后面跟着以定界文本格式表示的数据。收集所有Segment实例的转储文件,并且通过Master运行它们来恢复数据以及把数据重新分布到新的系统配置上。
要把一个数据库恢复到一种不同的系统配置
- 确保有一个完全的备份集,包括Master的转储文件(gp_dump_-1_1_timestamp、gp_dump_-1_1_timestamp_post_data)以及每个Segment实例一个的转储文件(例如gp_dump_0_2_timestamp、gp_dump_1_3_timestamp、gp_dump_2_4_timestamp等等)。每一个转储文件必须有相同的时间戳键。gpcrondump在每个Segment实例的数据目录中创建转储文件。必须收集所有的转储文件并且把它们移动到Master主机上的一个位置。可以把每个Segment转储文件拷贝到Master、装载它然后在装载成功后删除它。
确保要恢复到其中的数据库已经在系统中创建。例如:
$ createdb database_name
装载Master转储文件来恢复数据库对象。例如:
$ psql database_name -f /gpdb/backups/gp_dump_-1_1_20160714
装载每一个Segment转储文件来恢复数据。例如:
$ psql database_name -f /gpdb/backups/gp_dump_0_2_20160714
$ psql database_name -f /gpdb/backups/gp_dump_1_3_20160714
$ psql database_name -f /gpdb/backups/gp_dump_2_4_20160714
$ psql database_name -f /gpdb/backups/gp_dump_3_5_20160714
...
装载后续数据文件来恢复索引、触发器、主键约束等数据库对象。
$ psql database_name -f /gpdb/backups/gp_dump_0_5_20160714_post_data
基于来自原始数据库的值更新数据库序列。
可以使用系统工具gunzip和egrep从原始的Greenplum数据库的Master转储文件gp_dump_-1_1_timestamp.gz中把序列值信息抽取到一个文本文件中。这个命令把该信息抽取到文件schema_path_and_seq_next_val中。
gunzip -c path_to_master_dump_directory/gp_dump_-1_1_timestamp.gz | egrep "SET search_path|SELECT pg_catalog.setval"
> schema_path_and_seq_next_val
这个示例命令假设原始的Greenplum数据库的Master转储文件在/data/gpdb/master/gpseg-1/db_dumps/20150112中。
gunzip -c /data/gpdb/master/gpseg-1/db_dumps/20150112/gp_dump_-1_1_20150112140316.gz
| egrep "SET search_path|SELECT pg_catalog.setval" > schema_path_and_seq_next_val
在抽取该信息后,使用Greenplum数据库的psql工具更新数据库中的序列。这个示例命令更新数据库test_restore中的序列信息:
psql test_restore -f schema_path_and_seq_next_val
上级主题: 备份和恢复数据库