Deepgreen & Greenplum DBA小白普及課之三(備份問題解答)
不積跬步無以至千裏,要想成為一名合格的數據庫管理員,首先應該具備紮實的基礎知識及問題處理能力。本文參考Pivotal官方FAQ,對在管理Deepgreen & Greenplum時經常會遇到的問題提出解決思路/答案,本篇主要講備份方麵的問題。希望對大家有所幫助,如果有朋友有更多的問題分享,請留言,我將一並整理。
1.簡單描述一下Deepgreen & Greenplum的備份架構?
當我們執行全庫備份操作時,後台進行了如下操作:
- 檢查備份命令語法
- 檢查備份目錄是否存在,如果不存在便創建目錄
- 檢查備份文件存放目錄大小是否能夠放下備份文件
- 如果上麵三條都滿足,緊接著開始備份數據庫
- 在pg_class上喚起排它鎖,阻止DDL操作和另外的備份動作
- 一旦DDL語句備份完成,在所有用戶表上喚起共享鎖
- pg_class上的排它鎖釋放
- 備份請求被下發到集群中的所有Segment節點
- 備份請求開始並行備份各個Segment的數據
- 備份完成後,請求和用戶表上的鎖都被釋放
- 備份完成
2.簡單描述一下Deepgreen & Greenplum增量備份的架構?
當我們執行增量備份操作時,後台進行了如下操作:
- 每次執行數據庫備份時,gpcrondump工具為AO/CO表創建狀態文件
- 這些狀態文件用來記錄數據庫中AO/CO表的元組/行的數量
- 這些狀態文件也記錄了這些表的操作元數據(truncate,alter,etc)
- 狀態文件不存儲heap表的相關信息,因為每次增量備份都備份所有heap表數據
- 當我們執行增量備份時,gpcrondump以上次生成的狀態文件為準,去對比每一個表的變化
- 如果某張表自上次備份後狀態有變化,就去備份這部分變化數據
- 以上步驟隻對AO和CO表備份試用
- AO-Append-optimized,CO-Column-oriented
3.數據庫提供哪些備份和恢複工具?
主要分為以下四種,具體試用方法請參考官方文檔:
- gpcrondump/gpdbrestore
- gp_dump/gp_restore
- pg_dump/pg_restore
- copy..to../copy..from..
4.上麵提到的這幾種工具在什麼情境下使用?
- gpcrondump/gpdbrestore - 用於並行備份或恢複,可與Linux定時任務配合使用
- gp_dump/gp_restore - 用於並行備份或恢複
- pg_dump/pg_restore - 用於非並行備份或恢複,少量數據備份
- copy..to../copy..from.. - 用於非並行備份或恢複,多用於導出/導入平麵數據文件,例如csv
5.如何備份獲得一個表的DDL語句?
可以使用pg_dump導出,例如:
pg_dump -t njonna.accounts -s -f ddl_accounts.sql
Where:
-f ddl_accounts.sql is output file.
-t njonna.accounts is table name with schema njonna.
-s dump only schema no data
6.gpcrondump和gp_dump有什麼不同?
- gpcrondump在gp_dump基礎上包裝而成,可以直接調用,也可以在crontab定時任務中調用。
7. 如何備份所有數據庫的schema?
使用pg_dumpall工具可以把所有數據庫的信息導出來,其中也包含資源隊列和角色,導出所有數據庫的schema可以用下麵例句:
pg_dumpall --gp-syntax --schema-only > db_dump.sql
8.如何複製一個數據庫?
下麵命令可以創建一個數據庫的全複製:
CREATE DATABASE new_dbname TEMPLATE old_dbname;
9.如何在Linux定時任務中配置一個定期備份?
gpcrondump工具是gp_dump的封裝,可以與crontab定時任務配合使用。下麵語句展示了一項每天淩晨0點1分執行一次備份的例子,執行前注意初始化數據庫的環境變量:
source /home/gpadmin/.bashrc
01 0 * * * gpadmin gpcrondump -x test -c -g -G -a -q >> gp_test.log
10.gp_dump和pg_dump的不同是什麼?
- pg_dump/pg_dumpall可以從Deepgreen或者Greenplum數據庫遷移數據到其他類型的數據庫,如postgresql。他們在Master上非並行的執行並生成一個導出文件,不會涉及到Segment備份動作。他們生成的數據文件不能被gp_restore使用。
- gp_dump和gpcrondump不備份全局對象(資源隊列、角色等)。這些對象必須使用pg_dumpall來備份。
最後更新:2017-07-02 20:39:34