gp 导出数据字典_Greenplum 数据备份恢复

Greenplum 数据备份恢复https://www.cndba.cn/Marvinn/article/3112

目录 Greenplum 数据备份恢复备份恢复操作概述关于并行备份(gp_dump)关于非并行备份(pg_dump)关于并行恢复(gp_restore)关于非并行恢复(pg_restore)备份数据库使用gp_dump使用gpcrondump非并行备份恢复数据库非并行恢复从并行备份文件恢复使用gp_restore恢复使用gpdbrestore恢复恢复到配置不同的GP系统

备份恢复操作概述

关于并行备份(gp_dump)

1) GP同时备份Master和所有活动的Segment实例

2) 备份消耗的时间与系统中实例的数量没有关系

3) 在Master主机上备份所有DDL文件和GP相关的数据字典表

https://www.cndba.cn/Marvinn/article/3112

4) 每个Segment备份各自的数据

5) 所有备份文件组成一个完整的备份集合,通过唯一14位数字的时间戳来识别

关于非并行备份(pg_dump)https://www.cndba.cn/Marvinn/article/3112

1) GP依然支持常规的PostgreSQL备份命令pg_dump和pg_dumpall

2) 备份将在Master主机上创建一个包含所有Segment数据的大的备份文件

3) 不适合于全部数据备份,适用于小部分数据的迁移或备份

关于并行恢复(gp_restore)https://www.cndba.cn/Marvinn/article/3112

1) 通过gp_dump产生的时间戳来辨识备份集合,恢复数据库对象和数据到分布式数据库中

2) 每个Segment并行恢复各自的数据

3) 被恢复的GP系统必须与备份的系统同构

关于非并行恢复(pg_restore)

1) 使用由pg_dump或pg_dumpall创建的备份文件来恢复

2) 使用非并行恢复可以实现异构系统恢复

备份数据库

备份数据库的四种选择

1) 为每个实例创建一个备份文件

可用于全库备份或者相同配置的系统之间迁移数据;

2) 使用gpcrondump进行定期备份

对gp_dump进行包装,使用cron调度GP数据库的后台进行备份;

https://www.cndba.cn/Marvinn/article/3112

调用gpcrondump的调度作业应该部署在GP的Master主机;

gpcrondump命令还备份数据库角色和服务器配置等数据库之外的对象

全备脚本如下:支持增量,具体自行查看

[root@master backup]# cat backup.sh

#!/bin/sh

backupdir="/data/backup"

logdir=$backupdir

MASTER_DATA_DIRECTORY="/data/master/gpseg-1"

export MASTER_DATA_DIRECTORY

source /gp/greenplum-db/greenplum_path.sh

dbid="PG"

dbname="PG"

#for dbname in `psql -A -q -t -h $PGHOST -p $PGPORT -U $PGUSER -c "select datname from pg_database where datname <>'template0'"`

#do

now=`date +%Y%m%d%H%M%S`

gpcrondump -a -C --dump-stats -g -G -h -r --use-set-session-authorization -x $dbname -u $backupdir --prefix $dbid -l $logdir

#done

3) 使用pg_dump或pg_dumpall创建单个备份文件

https://www.cndba.cn/Marvinn/article/3112

可用于不同数据库之间少量数据迁移或备份;

4) 文件系统备份

借助操作系统或者其他第三方工具来进行备份,实现增量备份

使用gp_dump

1) 备份GP数据库

$ gp_dump testdw1

https://www.cndba.cn/Marvinn/article/3112

注意调整selinux安全级别,/usr/sbin/setenforce 0

2) gp_dump命令将在数据目录生成如下的备份文件

在Master主机上

数据字典表:gp_catalog_1

创建数据库SQL语句:gp_cdatabase_1

创建schema SQL语句:gp_dump_1

创建Table SQL语句:gp_dump_1_post_data

在Segment主机上

用户数据文件:gp_dump_0_ _

日志文件:gp_dump_status_0_ _

使用gpcrondumphttps://www.cndba.cn/Marvinn/article/3112

1) gpcrondump在Master和Segment的数据目录创建备份文件:/db_dumps/YYYYMMDD

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

非并行备份

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

恢复数据库

https://www.cndba.cn/Marvinn/article/3112

非并行恢复

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命令来恢复;

如果是在不同集群间迁移,必须使用非并行恢复

使用gp_restore恢复

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

使用gpdbrestore恢复

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/201312311

恢复到配置不同的GP系统

注:可适用于并行备份的数据恢复到Segment节点数不同的GP系统集群环境

1) 使用并行备份文件通过GP Master做非并行装载

2) Segment备份文件内容包含了COPY命令,数据是分割平面格式

3) 恢复步骤 https://www.cndba.cn/Marvinn/article/3112

1、确保要恢复到其中的数据库已经在系统中创建。

例如:

$ createdb database_name

2、装载Master转储文件来恢复数据库对象。例如:

$ psql database_name -f /gpdb/backups/gp_dump_-1_1_20160714

3、装载每一个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

...

装载后续数据文件来恢复索引、触发器、主键约束等数据库对象。

4、$ psql database_name -f /gpdb/backups/gp_dump_0_5_20160714_post_data

5、基于来自原始数据库的值更新数据库序列。

可以使用系统工具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

版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值