1) GP同时备份Master和所有活动的Segment实例
2) 备份消耗的时间与系统中实例的数量没有关系
3) 在Master主机上备份所有DDL文件和GP相关的数据字典表
4) 每个Segment备份各自的数据
5) 所有备份文件组成一个完整的备份集合,通过唯一14位数字的时间戳来识别
1) GP依然支持常规的PostgreSQL备份命令pg_dump和pg_dumpall
2) 备份将在Master主机上创建一个包含所有Segment数据的大的备份文件
3) 不适合于全部数据备份,适用于小部分数据的迁移或备份
1) 通过gp_dump产生的时间戳来辨识备份集合,恢复数据库对象和数据到分布式数据库中
2) 每个Segment并行恢复各自的数据
3) 被恢复的GP系统必须与备份的系统同构
1) 使用由pg_dump或pg_dumpall创建的备份文件来恢复
2) 使用非并行恢复可以实现异构系统恢复
1) 为每个实例创建一个备份文件
可用于全库备份或者相同配置的系统之间迁移数据;
2) 使用gpcrondump进行定期备份
对gp_dump进行包装,使用cron调度GP数据库的后台进行备份;
调用gpcrondump的调度作业应该部署在GP的Master主机;
gpcrondump命令还备份数据库角色和服务器配置等数据库之外的对象
3) 使用pg_dump或pg_dumpall创建单个备份文件
可用于不同数据库之间少量数据迁移或备份;
4) 文件系统备份
借助操作系统或者其他第三方工具来进行备份,实现增量备份
1) 备份GP数据库
$ gp_dump testdw
注意调整selinux安全级别,/usr/sbin/setenforce 0
2) gp_dump命令将在数据目录生成如下的备份文件
数据字典表:gp_catalog_1_
创建数据库SQL语句:gp_cdatabase_1_
创建schema SQL语句:gp_dump_1_
创建Table SQL语句:gp_dump_1_
用户数据文件:gp_dump_0_
日志文件:gp_dump_status_0_
1) gpcrondump在Master和Segment的数据目录创建备份文件:
2) Segment数据的备份使用gzip压缩格式
3) 使用CRON调度备份操作
定义一个调用gpcrondump的crontab条目。
例如,在午夜1点备份testdw数据库
0 1 0 * * * gpadmin source $GPHOME/greenplum_path.sh; gpcrondump –x testdw –c –g –G –a –q >> gp_testdwdump.log
创建一个名为mail_contacts的文件放置在GP SUPERUSER的根目录。
例如,$ vi /home/gpadmin/mail_contacts
在该文件中,每行输入一个电邮地址。例如:[email protected]
1) 使用pg_dump或者pg_dumpall进行备份
2) 导出testdw数据库到SQL脚本文件: pg_dump testdw > testdw.sql
3) 导出包含分布键信息的testdw数据库到tar文件: pg_dump –Ft –gp-syntax testdw > testdw.tar
4) 导出testdw数据库到定制格式的归档文件:pg_dump –Fc testdw > testdw.dump
5) 导出单个表: pg_dump –t tb_cp_02 testdw > tb_cp_02_testdw.sql
6) 导出混合大小写名称的表: pg_dump –t ‘”MixedTableName”’ testdw > tab_testdw.sql
7) 集群备份: pg_dumpall > all.dump
1) 使用pg_restore或psql进行恢复
2) 恢复testdw数据库: pg_restore –d testdw testdw.dump
3) 恢复SQL备份文件: psql -d testdw –f tb_cp_02_testdw.sql
1) 在决定使用恢复程序时,需确定以下几个问题:
a) 备份文件在哪里?
如果备份文件位于gp_dump生成的原始位置,可以简单的通过gp_restore命令恢复;
如果备份文件已经移除GP集群,使用gpdbrestore来恢复
b) 是否需要恢复整个系统,还是只恢复数据?
如果GP仍在运行并仅需要恢复数据,使用gp_restore或gpdbrestore命令来恢复;
如果丢失了整个集群或者需要从备份来重建整个集群,使用gpinitsystem命令
c) 是否恢复的系统与备份时的系统具有相同数量的Instance?
如果相同,使用gp_restore或gpdbrestore命令来恢复;
如果是在不同集群间迁移,必须使用非并行恢复
1) 如果在备份时使用了参数:-s(仅模式),-a(仅数据),–gp-c(压缩),–gp-d(修改备份文件目录),那么在恢复时也要指定这些参数。
2) gp_restore命令将执行如下操作:
a) 在Master主机上
运行由gp_dump生成的gp_dump_1_
文件中SQL DDL命令,重建数据库的模式和对象;
在Master数据目录生成日志文件,日志文件的名称为:gp_restore_status_1_
gp_restore在每个需要恢复的Instance上启动一个名为gp_restore_agent的程序,gp_restore_agent进程在Segment主机上运行并向Master主机上的gp_restore进程报告状态
b) 在Segment主机上
每个Instance使用gp_dump生成的gp_dump_1 _
文件来恢复用户数据
每个Instance生成一个日志文件,名字为:gp_restore_status_1_
c) 恢复数据库
创建需要被恢复的数据库。例如:$ createdb testdw
在Master主机,运行gp_restore命令(–gp-k指定备份操作时间戳标识符,-d指定恢复的数据库)
$ gp_restore –gp-k=20131231001327 –d testdw
1) gpdbrestore命令是对gp_restore命令的包装,提供更灵活的选项
2) 使用gpcrondump备份生成的备份文件来进行恢复
3) 恢复testdw数据
a) 创建需要被恢复的数据库。例如:
$ createdb testdw
b) 在Master主机上执行gpdbrestore命令(-R指定备份文件所在的主机名和路径)
$ gpdbrestore –b 20131231
c) 从归档主机恢复(-R指定备份文件所在的主机名和路径)
$ gpdbrestore –R archive_host:/gpdb/backups/archive/20131231
1) 使用并行备份文件通过GP Master做非并行装载
2) Segment备份文件内容包含了COPY命令,数据是分割平面格式
3) 恢复步骤
a) 确保具备了全部的备份文件,包括Master和每一个Segment的文件,所有的文件具有相同的时间戳标识符
b) 创建需要恢复的数据库,
$ createdb testdw
c) 装载Master备份文件以恢复数据库对象,
$ psql -d testdw -f /data/backups/gp_dump_1_1_20131231001327
d) 装载每个Segment的备份文件以恢复数据,
$ psql –d testdw -f /data/backups/gp_dump_0_2_20131231001327
$ psql –d testdw -f /data/backups/gp_dump_0_3_20131231001327
e) 恢复Table相关的对象,比如索引、触发器、主键约束等
$ psql –d testdw -f /data/backups/ gp_dump_1_1_20131231001327_post_data