GPDB43 Administrator Guide--第六章 備份與恢復資料庫

panpong發表於2015-09-14

第六章 備份與恢復資料庫

作用:利用備份重建和還原資料庫。利用備份遷移資料庫到另一個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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章