Greeplum 系列 备份与恢复
Posted binarylei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Greeplum 系列 备份与恢复相关的知识,希望对你有一定的参考价值。
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 放入邮件地址
[email protected]
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 主机上
- 运行由 gp_dump 生成的 gp_dump_1_
- 在 Master 数据目录生成日志文件,日志文件的名称为:gp_restore_status_1_
- gp_restore 在每个需要恢复的 Instance 上启动一个名为 gp_restore_agent 的程序,gp_restore_agent 进程在 Segment 主机上运行并向 Master 主机上的 gp_restore 进程报告状态
(2) 在 Segment 主机上
- 每个 Instance 使用 gp_dump 生成的 gp_dump_1
- 每个 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;
在决定使用恢复程序时,需确定以下几个问题:
备份文件在哪里?
如果备份文件位于 gp_dump 生成的原始位置,可以简单的通过 gp_restore 命令恢复;如果备份文件已经移除 GP 集群,使用 gpdbrestore 来恢复
是否需要恢复整个系统,还是只恢复数据?
如果 GP 仍在运行并仅需要恢复数据,使用 gp_restore 或 gpdbrestore 命令来恢复;如果丢失了整个集群或者需要从备份来重建整个集群,使用 gpinitsystem 命令
是否恢复的系统与备份时的系统具有相同数量的 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 系列 备份与恢复的主要内容,如果未能解决你的问题,请参考以下文章