前言

在網站上線後,持續備份是一件很重要的是,尤其是資料庫,刪錯庫就跑路。

備份有很多方式,可以透過 Google Cloud SQL 備份、匯出。

今天要介紹的方式是透過 pg_dump 指令,自動備份 PostgreSQL,並且把檔案上傳到 Google Drive。

本文章要介紹的是透過 Golang 與 cron 套件,每週自動呼叫 pg_dump,並將匯出的檔案上傳到 Google Drive 留存。


執行 pg_dump 的方式其實也可以不透過 Golang,直接透過 Linux crontab 也可以;本文章介紹使用 Golang 是因為資料庫參數都已經放在 env 了,直接透過程式管理,才不用分2個地方處理,而且還可以透過程式自動上傳到 Google Drive。


上傳的方式若不是儲存到 Google Drive 也可以,儲存在其他檔案伺服器也行,但本文章僅介紹上傳至 Google Drive 的方式。

1. pg_dump 指令說明

為了能順利執行 pg_dump 指令,首先要先安裝指令,以 CentOS 8為例子,輸入以下指令安裝:


sudo yum -y install postgresql


備註: 本文章以 PostgreSQL 14.2 版實測


pg_dump --version


pg_dump (PostgreSQL) 14.2

pg_dump 會將資料庫的檔案全部匯出,範例指令如下:


pg_dump -h 127.0.0.1 -U my_db_username_codus -p 5432 -d my_db_name_example_app -f dump.sql


建議可以進行壓縮,範例指令如下:


pg_dump -h 127.0.0.1 -U my_db_username_codus -p 5432 -d my_db_name_example_app -f dump.sql.gz -Z 1


指令的每一個欄位的說明如下:

pg_dump -h {{hostname}} -U {{username}} -p {{port}} -d {{database name}} -f {{output file}} -Z {{壓縮級別}}


更多詳細資料可以參考下方的參考連結「pg_dump - PostgreSQL」,PostgreSQL 的官方說明。

2. Golang 排程執行

我們透過「github.com/robfig/cron/v3」套件,很簡單地示範每天凌晨4點執行程式。


透過 Golang Standard Library「os/exec」執行「pg_dump」指令。


套件的細節這邊不贅述,有興趣的朋友可以到 GitHub 或 Golang 官方文件查看。

3. 上傳至 Google Drive

透過「2. Golang排程執行」,每天凌晨4點會 dump 資料庫,產生 sql 檔案,接著我們可以把這個檔案上傳至 Google Drive。


如何設定 Google Drive 與存取資料夾/檔案的方式,請參考下方參考連結「不需要OAuth驗證即可存取 Google Drive 檔案 - 使用 Golang」,細節這邊就不再說明,僅列出範例程式碼。

資料庫備份檔案成功上傳至 Google Drive 畫面截圖

資料庫備份檔案成功上傳至 Google Drive 畫面截圖

參考連結

pg_dump - PostgreSQL 不需要OAuth驗證即可存取 Google Drive 檔案 - 使用 Golang
FBLINETwitterLinkIn
回部落格