GreenPlum--備份與恢復

備份恢復操作概述-關於並行備份(gp_dump)

GP同時備份Master和所有活動的Segment實例
備份消耗的時間與系統中實例的數據沒有關係
在Master主機上備份所有DDL文件和GP相關的數據字典表
每個Segment備份各自的數據
所有備份文件組成一個完整的備份集合,通過唯一14位數字的時間戳來識別

缺點:
1、還有一分部內容沒有備份,比如說用戶角色信息、服務器配置信息,日誌等,這時候可以用gpcrondump
2、沒有增量備份的機制

關於非並行備份(pg_dump)
GP依然支持常規的PostgreSQL備份命令pg_dump和pu_dumpall
備份將在Master主機上創建一個包含所有Segment數據的大的備份文件
不適合於全部數據備份,適用於小部分數據的遷移或備份

關於並行恢復(gp_restore)
通過gp_dump產生的時間戳來辨識備份集合,恢復數據庫對象和數據到分佈式數據庫中
每個Segment並行恢復各自的數據
被恢復的GP系統必須與備份的系統同構(節點一致等等)

關於非並行恢復(pg_restore)
使用由pg_dump或pg_dumpall創建的備份文件來恢復
使用非並行恢復可以實現異構系統恢復

備份數據庫的四種選擇:
爲每個實例創建一個備份文件
可用於全庫備份或者相同配置的系統之間遷移數據;

使用gpcrondump進行定期備份
對gp_dump進行包裝,使用cron調度GP數據庫的後臺進行備份;
調用gpcrondump的調度作業應該不是在GP的Master主機;
gpcrondump命令還備份數據庫角色和服務器配置德國數據庫之外的對象

使用gp_dump或pg_dump創建單個備份文件
可用於布偶聽數據庫之間少量數據遷移或備份;

文件系統備份
藉助操作系統或者其他第三方工具來進行備份,實現增量備份。

使用gp_dump
備份GP數據庫
$gp_dump testdw
注意調整selinux安全級別,/usr/sbin/setenforce 0

默認的是/etc/selinux/config 修改爲SELINUX=disabled
如果是臨時修改就用/usr/sbin/setenforce 0

gp_dump命令將在數據目錄生成如下的備份文件
在Master主機上

數據字典表:
gp_catalog_1_<dbid>_<timestamp>
創建數據庫SQL語句:
gp_cdatabase_1_<dbid>_<timestamp>
創建schema SQL語句:
gp_dump_1_<dbid>_<timestamp>
創建Table SQL語句:
gp_dump_1_<dbid>_<timestamp>_post_data

在Segment主機上

用戶數據文件
gp_dump_0_<dbid>_<timestamp>
日誌文件:
gp_dump_status_0_<dbid>_<timestamp>

使用gpcrondump
gpcrondump在Master和Segment的數據目錄創建備份文件:
<data_directory>/db_dumps/YYYYMMDD
Segment數據的備份使用gzip壓縮格式
使用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
在該文件中,每行輸入一個電郵地址。例如:
[email protected]

非並行備份與恢復

使用pg_dump或者pg_dumpall進行備份
導出testdw數據庫到SQL腳本文件
pg_dump testdw > testdw.sql
導出包含分佈鍵信息的testdw數據庫到tar文件
pg_dump -Ft -gp-syntax testdw > testdw.tar
導出testdw數據庫到定製格式的歸檔文件
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
非並行恢復
使用pg_restore或psql進行恢復
恢復testdw數據庫
pg_restore -d testdw testdw.dump
恢復SQL備份文件
psql -d testdw -f tb_cp_02_testdw.sql

從並行備份文件恢復
在決定使用恢復程序時,需確定以下幾個問題:
備份文件在哪裏?
如果備份文件位於gp_dump生成的原始位置,可以簡單的通過gp_restore命令恢復;
如果備份文件已經移除GP集羣,使用gpdbrestore來恢復
是否需要恢復整個系統,還是隻恢復數據?
如果GP仍在運行並僅需要恢復數據,使用gp_restore或gpdbrestore命令來恢復;
如果丟失了整個集羣或者需要從備份來重建整個集羣,使用gpinitsystem命令
是否恢復的系統與備份時的系統具有相同數量的Instance?
如果相同,使用gp_restore或gpdbrestore命令來恢復;
如果是在不同集羣間遷移,必須使用非並行恢復

使用gp_restore恢復

如果在備份時使用了參數:-s(僅模式),-a(僅數據),–gp-c(壓縮),–gp-d(修改備份文件目錄),那麼在恢復時也要指定這些參數。
gp_restore命令將執行如下操作:

在Master主機上
運行由gp_dump生成的gp_dump_1_文件中SQL DDL命令,重建數據庫的模式和對象;
在Master輸數據目錄生成日誌文件,日誌文件的名稱爲:
gp_restore_status_1
_
gp_restore在每個需要恢復的Instance上啓動一個名爲gp_restore_agent的程序,gp_restore_agent進程報告狀態

在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

使用gpdbrestore恢復
gpdbrestore命令是對gp_restore命令的包裝,提供更靈活的選項
使用gpcrondump備份生成的備份文件來進行恢復
恢復testdw數據
創建需要被恢復的數據庫。例如;
$createdb testdw
在Master主機上執行gpdbrestore命令(-R指定備份文件所在的主機名和路徑)
$gpdbrestore -b 20121231
或者從歸檔主機恢復(-R指定備份文件所在的主機名和路徑)
$gpdbrestore -R archive_host:/gpdb/backups/archive/20131231

恢復到配置不同的GP系統
使用並行備份文件通過GP Master做非並行裝載
Segment備份文件內容包含了COPY命令,數據是分割平面格式
恢復步驟
確保具備了全部的備份文件,包括Master和每一個Segment的文件,所有的文件具有相同的時間戳表示
創建需要恢復的數據庫
$createdb testdw
裝載Master備份文件以恢復數據庫對象
$psql testdw -f /data/backups/gp_dump_1_1_20131231001327
裝載每個Segment的備份文件以恢復數據
$psql testdw -f /data/backups/gp_dump_0_2_20131231001327
$psql testdw -f /data/backups/gp_dump_0_3_20131231001327
恢復Table相關的對象,比如索引、觸發器、主鍵約束等
$psql testdw -f /data/backups/gp_dump_1_1_20131231001327_post_data

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章