要使用gp_restore或gpdbrestore并行恢复操作,恢复的系统必须与备份的系统具有相同的配置(相同数量的Instance)。如果想要恢复数据库对象和数据到配置不同的系统(比如系统扩展了更多的Segment),仍然可以使用并行备份文件来恢复,通过GP Master做非并行装载。要进行非并行装载,必须具备:
3. 确保在系统中,需要恢复的数据库(Database)已经被创建。如果查看Segment备份文件的内容,会发现,其简单的包含了COPY命令,数据是分割平面格式。如果收集了所有Instance的备份文件并通过Master装载,即可恢复所有的数据并重分布到新的系统。
恢复到配置不同的GP系统
1. 首先确保具备了全部的备份文件。包括Master的备份文件(gp_dump_1_1_<timestamp>, gp_dump_1_1_<timestamp>_post_data)和每个Instance的备份文件(gp_dump_0_2_<timestamp>,gp_dump_0_3_<timestamp>,gp_dump_0_4_<timestamp>,等等)。所有的备份文件必须含有相同时间戳标识符。缺省状态下,gp_dump在每个Instance的数据目录生成备份文件,因此,可能需要收集所有的备份文件并放置到需要恢复的系统Master主机。如果Master没有足够的磁盘空间,可以拷贝一个Instance,装载,删除,再拷贝其他Instance。
2. 确保在系统中,需要恢复的数据库(Database)已经被创建。例如:
$ createdb database_name
3. 装载Master备份文件以恢复数据库对象。例如:
$ psql database_name -f /gpdb/backups/gp_dump_1_1_20080714
4. 装载每个Segment的备份文件以恢复数据。例如:
$ psql database_name -f /gpdb/backups/gp_dump_0_2_20080714
$ psql database_name -f /gpdb/backups/gp_dump_0_3_20080714
$ psql database_name -f /gpdb/backups/gp_dump_0_4_20080714
$ psql database_name -f /gpdb/backups/gp_dump_0_5_20080714
...
5. 装载Table相关对象的文件,恢复数据库对象如索引、触发器、主键约束等:
$ psql database_name -f /gpdb/backups/gp_dump_0_5_20080714_post_data