码迷,mamicode.com
首页 > 其他好文 > 详细

Greeplum 系列(六) 备份与恢复

时间:2018-05-21 21:55:22      阅读:1241      评论:0      收藏:0      [点我收藏+]

标签:对象   crond   agent   备份与恢复   pcr   简单的   适用于   backup   postgre   

Greeplum 系列(六) 备份与恢复

一、备份

1.1 并行备份(gp_dump)

GP 同时备份 Master 和所有活动的 Segment 实例,备份消耗的时间与系统中实例的数量没有关系。在 Master 主机上备份所有 DDL 文件和 GP 相关的数据字典表,每个 Segment 备份各自的数据。所有备份文件组成一个完整的备份集合,通过唯一 14 位数字的时间戳来识别。

gp_dump dbname;

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

-- 在 Master 主机上
gp_catalog_1_<dbid>_<timestamp>     -- 数据字典表
gp_cdatabase_1_<dbid>_<timestamp>   -- 创建数据库 SQL 语句
gp_dump_1_<dbid>_<timestamp>        -- 创建 schema SQL 语句
gp_dump_1_<dbid>_<timestamp>_post_data  -- 创建 Table SQL 语句

-- 在 Segment 主机上
gp_dump_0_ <dbid>_<timestamp>           -- 用户数据文件
gp_dump_status_0_ <dbid>_<timestamp>    -- 日志文件

1.2 并行备份(gpcrondump)

在 Master 和 Segment 的数据目录创建备份文件:

-- Segment 数据的备份使用 gzip 压缩格式
<data_directory>/db_dumps/YYYYMMDD

使用 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

-- mail_contacts 放入邮件地址
dba@company.com

1.3 非并行备份(pg_dump)

GP 依然支持常规的 PostgreSQL 备份命令 pg_dump 和 pg_dumpall,备份将在 Master 主机上创建一个包含所有 Segment 数据的大的备份文件。因此,不适合于全部数据备份,适用于小部分数据的迁移或备份。

pg_dump testdw > testdw.sql;        -- 导出 SQL 脚本文件
pg_dump –Ft –gp-syntax testdw > testdw.tar;         -- 导出包含分布键信息的 tar 文件
pg_dump –Fc testdw > testdw.dump;   -- 导出到定制格式的归档文件
pg_dump –t tb_cp_02 testdw > tb_cp_02_testdw.sql;   -- 导出单个表
pg_dump –t ‘"MixedTableName"‘ testdw > tab_testdw.sql;  -- 导出混合大小写名称的表
pg_dumpall > all.dump;              -- 集群备份

二、恢复

2.1 并行恢复(gp_restore)

通过 gp_dump 产生的时间戳来辨识备份集合,恢复数据库对象和数据到分布式数据库中,每个 Segment 并行恢复各自的数据。被恢复的 GP 系统必须与备份的系统同构,否则只能使用串行恢复。

如果在备份时使用了参数:-s(仅模式),-a(仅数据),--gp-c(压缩),--gp-d(修改备份文件目录),那么在恢复时也要指定这些参数。

gp_restore 命令将执行如下操作

(1) 在 Master 主机上

  1. 运行由 gp_dump 生成的 gp_dump_1_
  2. 在 Master 数据目录生成日志文件,日志文件的名称为:gp_restore_status_1_
  3. gp_restore 在每个需要恢复的 Instance 上启动一个名为 gp_restore_agent 的程序,gp_restore_agent 进程在 Segment 主机上运行并向 Master 主机上的 gp_restore 进程报告状态

(2) 在 Segment 主机上

  1. 每个 Instance 使用 gp_dump 生成的 gp_dump_1
  2. 每个 Instance 生成一个日志文件,名字为:gp_restore_status_1_

恢复数据库

createdb testdw;
-- 在Master主机,运行gp_restore命令(--gp-k 指定备份操作时间戳标识符,-d 指定恢复的数据库)
gp_restore –gp-k=20131231001327 –d testdw;

2.2 并行恢复(gpdbrestore)

gpdbrestore 命令是对 gp_restore 命令的包装,提供更灵活的选项,使用 gpcrondump 备份生成的备份文件来进行恢复。

createdb testdw;        -- 创建需要被恢复的数据库
gpdbrestore –b 20131231;
-- 在 Master 主机上执行 gpdbrestore 命令(-R 指定备份文件所在的主机名和路径)
gpdbrestore –R archive_host:/gpdb/backups/archive/20131231;

2.3 非并行恢复(pg_restore)

使用由 pg_dump 或 pg_dumpall 创建的备份文件来恢复,使用非并行恢复可以实现异构系统恢复。

-- 使用 pg_restore 或 psql 进行恢复
pg_restore –d testdw testdw.dump;
psql -d testdw –f tb_cp_02_testdw.sql;

在决定使用恢复程序时,需确定以下几个问题:

  1. 备份文件在哪里?

    如果备份文件位于 gp_dump 生成的原始位置,可以简单的通过 gp_restore 命令恢复;如果备份文件已经移除 GP 集群,使用 gpdbrestore 来恢复

  2. 是否需要恢复整个系统,还是只恢复数据?

    如果 GP 仍在运行并仅需要恢复数据,使用 gp_restore 或 gpdbrestore 命令来恢复;如果丢失了整个集群或者需要从备份来重建整个集群,使用 gpinitsystem 命令

  3. 是否恢复的系统与备份时的系统具有相同数量的 Instance?

    如果相同,使用 gp_restore 或 gpdbrestore 命令来恢复; 如果是在不同集群间迁移,必须使用非并行恢复。

2.4 非并行恢复异构系统

确保具备了全部的备份文件,包括 Master 和每一个 Segment 的文件,所有的文件具有相同的时间戳标识符

-- 1. 创建需要恢复的数据库
createdb testdw;
-- 2. 装载 Master 备份文件以恢复数据库对象
psql -d testdw -f /data/backups/gp_dump_1_1_20131231001327;
-- 3. 装载每个 Segment 的备份文件以恢复数据
psql –d testdw -f /data/backups/gp_dump_0_2_20131231001327;
psql –d testdw -f /data/backups/gp_dump_0_3_20131231001327;
-- 4. 恢复 Table 相关的对象,比如索引、触发器、主键约束等
psql –d testdw -f /data/backups/ gp_dump_1_1_20131231001327_post_data;

每天用心记录一点点。内容也许不重要,但习惯很重要!

Greeplum 系列(六) 备份与恢复

标签:对象   crond   agent   备份与恢复   pcr   简单的   适用于   backup   postgre   

原文地址:https://www.cnblogs.com/binarylei/p/9069425.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!