ITPub博客

首页 > 大数据 > 数据分析 > GPDB43 Administrator Guide--第六章 备份与恢复数据库

GPDB43 Administrator Guide--第六章 备份与恢复数据库

翻译 数据分析 作者:panpong 时间:2015-09-14 10:25:31 0 删除 编辑

第六章 备份与恢复数据库

作用:利用备份重建和还原数据库。利用备份迁移数据库到另一个greenplum

一、备份与恢复操作

备份与恢复分为平行与非并行,也就是并行备份对应并行恢复、非并行备份对应非并行恢复。

(一)并行备份

工具:gpcrondump,默认备份目录为:gp_dump;可以执行全部备份和增量备份;gpcrondump可以直接在shell窗口运行也可以通过crontab自动调度运行;

Figure 10: Parallel Backups in Greenplum Database


 

(二)非并行备份:

工具一:pg_dumppg_dumpall,可以用在迁移pg数据库到greenplum数据库;备份仅创建单个dump文件,备份时注意master主机的空间是否够用。

工具二:copy to SQL命令拷贝所有或者部分表数据到文本文件中;

(三)并行恢复

gpdbrestore

(四)非并行恢复

 

Pg_restore:还原的前修改create table语句的DISTRIBUTED子句,如果不指定系统会指定默认值;

Figure 12: Non-parallel Restore Using Parallel Backup Files


 

二、备份数据库

备份数据库的过程中系统会锁表;当备份开始时,会对pg_class执行exclusive锁,锁表后相关的表、索引、视图不能被创建和删除,这期间搜集并备份数据库中schema信息;pg_classexclusive锁释放后,会对需要备份的所有表逐一执行ACCESS SHARE锁,当一个表备份完成后,释放该表的ACCESS SHARE锁。与ACCESS SHARE锁冲突的语句如下:

?   ALTER TABLE

?   CLUSTER

?   DROP TABLE

?   REINDEX

?   TRUNCATE

?   VACUUM FULL

(一)增量备份

    gpcrondump与gprestore是一对备份恢复工具。增量备份可以使用gpcrondump --incremental;增量备份只对做了如下操作的表进行备份;

?   ALTER TABLE

?   DELETE

?   INSERT

?   TRUNCATE

?   UPDATE

?   DROP and then re-create the table

对应分区表只备份变化的分区。对于增量备份集,是由一个全备份和一系列增量备份组成;并且备份集在一个单独的设备上,或者同一个数据域系统中,不能部分在数据域系统中其他在本地文件系统或者网络备份系统;

  • 备份表集合

通过gpcrondump选项--prefix实现增量备份一个指定的表集合。

首先,全备份一个表集合,通过指定--prefix,然后指定-t 或者--table-file,包含需要备份的表列表。也可以通过指定-T或者--exclusive-table-file,排除不需要备份的表列表。也可以指定-s或者--schema-file备份执行的schema中所有表,也可以通过指定-S或者--exclusive-schema-file排除不需要备份的schema-s-t不能同时使用;

        然后,gpcrondump选项--incremental--prefix执行增量备份;

例如:gpcrondump -x mydatabase --table-file=user-tables --prefix user_backup

  • 增量备份的恢复

gpdbrestore工具:-q选项指定备份类型信息写入日志文件;--noplan选项只恢复增量备份中的数据;--list-backup选项列出需要的全备份和增量备份信息;

(二)直接IO

  • 开启直接IO

        gpconfig -c gp_backup_directIO -v on

  • 降低网络chunks

        gpconfig -c gp_backup_directIO_read_chunk_mb -v 10 

        上面命令设置chunk size10M,默认为20M

  • 验证当前chunk szie

$ gpconfig –s gp_backup_directIO_read_chunk_mb

  • 验证直接IO开启与否

$ gpconfig –s gp_backup_directIO

(三)Data Domain Boost

        Data Domain Boost是gpcrondump gpdbrestore的可选项,提供更快的备份在最初备份操作之后,并提供重复数据删除,从源头上减少网络流量。当你使用Data Domain Boost从数据域系统恢复文件时,一些文件复制到master本地磁盘并且从那里恢复和其他地方直接恢复。参考Greenplum Database Utility Guide指南中的gpmfr

        使用Data Domain Boost需要购买license,并获得 Data Domain Boost大小的推荐值;

(四)symantec网络备份(赛门铁克备份工具)

 

。。。。。

 

(五)命名管道

   通过gpcrondump命令-K timestamp选项、--list-backup-file 选项,创建文件名为*_pipes*_regular_files的文件。然后指定regular_files文件备份数据库;

例如:

gpcrondump -x testdb -K 20130530090000 --list-backup-files -u /backups

gpcrondump -x testdb -K 20130530090000 -u /backups

gpdbrestore -x testdb -t 20130530090000 -u /backups

 

(六)自动并行备份

通过gpcrondump命令与crontab配合实现;

Linux Example:

SHELL=/bin/bash

GPHOME=/usr/local/greenplum-db-4.3.0.0

MASTER_DATA_DIRECTORY=/data/gpdb_p1/gp-1

01 0 * * * gpadmin source $GPHOME/greenplum_path.sh;

gpcrondump -x sales -c -g -G -a -q >> gp_salesdump.log

默认发送邮件的列表文件为/home/gpadmin/mail_contacts

另外,可以指定email,备份完成后会发送邮件。

$ vi /home/gpadmin/mail_contacts

dba@mycompany.com

jjones@mycompany.com

通过--email-file选项;如果没有指定或者没有mail_contacts文件,则警告[WARNING]:-Found neither /usr/local/greenplum-db/./bin/mail_contacts nor /home/gpadmin/mail_contacts

 

三、恢复数据库

        恢复数据库时需要考虑的三个问题:

  1.     备份文件位置;如果是gpcrondump备份到各个segment主机,则使用gpdbrestore恢复;
  2. 是重建数据库还是还原数据;恢复数据则使用gpdbrestore,如果是重建则使用gpinitsystem
  3. 恢复数据库到与原来相同的segment instance数量,还是不同的;相同则使用gpdbrestore即可,如果不同则必须做非并行恢复;参考:Restoring to a Different Greenplum System Configuration.
  4.  
  • 并行恢复

$gpcrondump -x db013 -t yduser.histmobilegsm

$gpdbrestore -t 20150806040302 --noanalyze -T yduser.histmobilegsm --truncate

 

  • 恢复数据库到不同的greenplum系统配置

步骤:1.需要全备份文件。如果是是并行备份,则需要从各segment主机集中到master主机,集中存储;

        2.确保数据库存在。如果新系统没有,则创建数据库;createdb

        3.首先加载master备份文件,如:

psql database_name -f /gpdb/backups/gp_dump_1_1_20120714

        4.然后,加载segment备份文件,如:

$ psql database_name -f /gpdb/backups/gp_dump_0_2_20120714

$ psql database_name -f /gpdb/backups/gp_dump_0_3_20120714

$ psql database_name -f /gpdb/backups/gp_dump_0_4_20120714

        5.再加载post data file,如:

$ psql database_name -f /gpdb/backups/gp_dump_0_5_20120714_post_data

        6.修改数据库sequence,如:

$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

$psql test_restore -f schema_path_and_seq_next_val

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16976507/viewspace-1798850/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
数据库工程师,熟悉oracle,postgresql,mysql,DB2等主流关系型数据库运维,调优,一直活跃在运维一线。了解Python,django,简单自动化运维系统开发。

注册时间:2009-03-06

  • 博文量
    138
  • 访问量
    283892