【乾貨】Greenplum備份恢復工具gpbackup(上篇)

編者按:

最近,社群的小夥伴一直在問gpbackup的問題,這幾天便花了點時間看了看原始碼,整理一個gpbackup的主題文章,希望能夠幫到大家。

gpbackup 的分享主題計劃分成3篇文章:

gpbackup簡介與原始碼編譯

gpbackup詳細使用方法

gprestore詳細使用方法及總結

上篇文章,我們首先來介紹一下,並從github上拉取原始碼進行編譯。

PART。01

gpbackup 簡介

Greenplum是MPP架構的分析型資料庫,其核心原始碼從2015年的v4。3版本開始開源至今,已經有6年多的時間了,起初,開源版本的並行備份恢復工具叫和。由於這個工具存在一些已知的缺陷,比如單獨備份一個大壓縮包導致單表恢復操作時間過長等,官方目前已經開發了替代工具和並進行了開源,GitHub地址為:https://github。com/greenplum-db/gpbackup 。

已知gpbackup和gprestore適配的Greenplum版本如下:

參考自社群大牛陳淼的《Greenplum-Database管理員指南6。2》,在此對作者的分享表示感謝,大家也可以學習該文件的 “並行備份gpbackup與gprestore” 部分,瞭解更多的相關內容。

GPDB 4。3。22及以後版本

GPDB 5。5。0及以後版本

GPDB 6。0。0及以後版本

這裡對各個版本的備份工具做一下總結:

GPDB 4。x/5。x的某些版本(具體版本參考上面),可以同時使用gpcrondump和gpbackup兩種工具;

GPDB 6。x版本開始,gpcrondump已經去掉了,只能使用gpbackup工具;

GPDB 6。x版本開始,官方版本的gpbackup提供單獨的安裝包,需要自行從vmware tanzu下載使用;開源版本的gpbackup可以從GitHub Release(https://github。com/greenplum-db/gpbackup/releases)上下載釋出包,或者自己進行原始碼編譯。

PART。02

gpbackup 原始碼編譯

gpbackup是基於Golang寫的,已經有很多網友在網上做了原始碼分析,這裡再絮叨一下原始碼編譯的過程吧,方便大家有一個整體的認識。

2。1 Golang環境配置

因為gpbackup是基於golang開發的,所以首先要配置golang基礎開發環境,這裡大家要注意,因為golang可以直接編譯跨平臺的包,所以你可以選擇在Mac上交叉編譯Linux系統用的包,只需要指定不同的編譯標籤(編譯部分再詳細介紹)。

1)安裝Golang

大家首先從 https://golang。google。cn/dl/ 下載準備用於編譯gpbackup的作業系統對應的軟體包,整個Linux的安裝包是通用的,只需要分清楚CPU架構是ARM還是X86即可。

下載完成後,需要自己進行安裝,通常安裝在對應作業系統的預設軟體位置,比如這裡我安裝在。這個路徑,就是所謂的GOROOT。

安裝完成後,需要配置三個環境變數:

環境變數配置完成後,在命令列執行如下命令,如果顯示正常,說明配置有效:

2)在GOPATH下建立相應的資料夾

2。2 gpbackup 原始碼下載編譯

1)下載原始碼

原始碼的下載方式有兩種,第一種是參考官方的指導使用go get,第二種是直接git把程式碼拉下來。

第一種:執行如下命令下載原始碼:

這種方式拉下來的原始碼,我這邊的位置有點奇怪,僅供參考:

第二種:執行如下命令下載原始碼:

以上兩種方式可以任選一種,我們習慣性的使用git去clone原始碼,並且這種方式可以明確的獲知原始碼的下載位置,我個人感覺更好一些;另外雖然在golang裡面,使用go mod方式管理依賴時,不再需要GOPATH,但是在gpbackup裡,GOPATH這個環境變數是必選項,不可以省略,因為最終打包好的檔案會放到$GOPATH/bin下面。

2)編譯

交叉編譯的選項如下:

最後你從$GOPATH/bin/下面會找到如下三個包:

便已完成後,執行如下命令安裝即可(或者手工copy):

PART。03

gpbackup 使用示例

在本節的最後部分,透過一個簡單的例子,帶大家看一下如何使用gpbackup。

直接執行命令 :

因授權導致的錯誤

如果你在執行備份命令時出現以下錯誤,可能跟檔案中的訪問授權有關:

從以上錯誤中可以看出,gpbackup在連線到資料庫時,採用的是pqx的connection url的方式,該報錯是因為pg_hba。conf檔案中對allinone這個主機的gpadmin使用者訪問做了密碼限制,可以把密碼限制放開,改為trust即可。

如果生產必須要求所有的IP(除了socket外)均需要密碼驗證,那麼請在執行gpbackup之前配置環境變數,如下:

gpbackup支援從以下環境變數中取值:

PGHOST

PGPORT

PGUSER

PGPASSWORD

下一篇,我們將介紹gpbackup詳細使用方法。

作者簡介

苑澤福,Greenplum中文社群專家

曾供職於鼎興達、瀚高,擁有豐富的資料庫開發運維經驗,近年來一直專注於Greenplum 資料庫,完成了多個基於Greenplum的資料平臺的落地

頂部