擔心資料庫突然掛掉或資料誤刪嗎?其實只要做好備份就能安心一大半。本文不用艱澀的術語,直接帶您認識 4 種真正管用的 PostgreSQL 備份方法,讓您的資料從此多一份保障。
在數位化時代,資料可說是企業最核心的資產之一。對於使用 PostgreSQL 作為資料庫管理系統的使用者而言,建立一套完善的備份策略,絕對是不可忽視的關鍵任務。無論是硬體故障、人為疏失,還是資安威脅,都可能導致資料毀損或遺失,因此,PostgreSQL 備份資料庫是每一位資料庫管理員(DBA)或系統維運人員都必須熟練掌握的技能。
本文將深入探討 PostgreSQL 的各種備份方案,從基礎的 pg_dump 工具,到進階的自動化排程,以及結合雲端儲存服務的新興備份思維 MultCloud 的網站備份功能,為您打造全方位的 PostgreSQL 資料庫備份知識體系。
PostgreSQL 內建了一個叫做 pg_dump 的工具,專門用來做邏輯備份。這個工具不需要額外安裝,只要您安裝了 PostgreSQL,它就已經在您的電腦裡了。
pg_dump 的運作原理是:連線到資料庫,讀取所有資料表的結構和內容,然後產生一份 SQL 指令清單。這份清單就是您的備份檔案。並且,pg_dump 在備份過程中不會鎖定資料庫,其他人仍然可以正常讀寫資料,不影響日常運作。
✅ 在 pg_dump 工具中使用以下指令,您就能完成对 PostgreSQL 資料庫的備份。
pg_dump -U 使用者名稱 -h 主機位置 -p 連接埠 -d 資料庫名稱 > 備份檔案.sql
如您要備份一個叫做「mydb」的資料庫,使用者是「postgres」,那么指令就如下所示:
pg_dump -U postgres -h 127.0.0.1 -p 5432 -d mydb > mydb_backup.sql
執行以上指令後,您就會得到一個「.sql」檔案,這就是您的備份檔了。這個檔案可以用任何文字編輯器打開來看,裡面密密麻麻的 SQL 指令就是您資料庫的全部內容。
邏輯備份是把資料庫裡的資料轉成 SQL 指令(也就是 CREATE TABLE、INSERT 這些資料庫聽得懂的語言),然後把 SQL 指令存成一個檔案。完成後,只要需要就能把資料庫還原回來。
此外,使用邏輯備份,無論您使用的是哪個版本的 PostgreSQL,只要執行這個 SQL 檔案,資料就能順利還原,且它不限版本與平台,最適合中小型資料庫,或是您需要選擇性備份(例如只備份某幾張表)的時候。
如果您的資料庫非常龐大(例如幾百 GB 甚至 TB 級別),邏輯備份就會花比較久的時間,而且還原時也需要從頭執行所有 SQL 指令,速度會比較慢。這時,建議您使用下面的方法。
pg_basebackup 是 PostgreSQL 官方提供的實體備份工具,屬於核心發行套件的一部分,無需額外安裝。它的設計目標是在資料庫處於運行狀態(線上備份)的情況下,產生一個完整的、時間點一致的基礎備份。
pg_basebackup 的運作基於 PostgreSQL 的 PITR(Point-In-Time Recovery) 架構。它利用資料庫的 WAL 日誌機制,確保在備份過程中即使有交易持續寫入,最終產生的備份仍然是事務一致的。
pg_basebackup 會在備份開始時記錄當前的 WAL 位置(LSN),然後複製所有資料檔案,最後再將備份期間產生的 WAL 日誌一併納入,保證備份的完整性。
✅ 基本指令語法與參數說明
pg_basebackup -D 輸出目錄 [選項參數]
| 參數 | 說明 |
|---|---|
| -D 目錄 | 指定備份檔案的輸出目標路徑 |
| -F p|t | 輸出格式:p(plain,純目錄結構)或 t(tar,打包成 tar 壓縮檔) |
| -P | 顯示備份進度資訊 |
| -v | 啟用詳細輸出模式(verbose) |
| -U 使用者 | 指定連線資料庫的使用者名稱 |
| -h 主機 | 指定資料庫伺服器的主機位址 |
| -p 連接埠 | 指定資料庫伺服器的連接埠號碼 |
| -Z 0~9 | 壓縮等級(僅適用於 tar 格式),數字越大壓縮率越高 |
| -R | 產生 standby.signal 檔案,用於建立複製備援伺服器 |
| -X stream|fetch | 指定 WAL 日誌的傳輸方式,stream 為串流模式,fetch 為一次性提取 |
👉️ 如果您要將整個資料庫的實體檔案複製到 /pgdata/backup/base/ 目錄,並顯示詳細的進度訊息。指令如下:
pg_basebackup -D /pgdata/backup/base/ -F p -Pv -U postgres -h 127.0.0.1 -p 5432
👉️ 如果您要將資料庫壓縮生一個 tar 壓縮檔,指令如下:
pg_basebackup -D /pgdata/backup/ -F t -Pv -U postgres -h 127.0.0.1 -p 5432 -Z 5
👉️ 如果您想製作一個包含 WAL 日誌的完整備份,可以參考以下指令:
pg_basebackup -D /pgdata/backup/ -F t -X stream -Pv -U postgres -h 127.0.0.1 -p 5432
前面兩種方法都只能讓您回到備份當下的狀態。如果在備份完成後,有新增了重要資料,但這部分資料還沒有進行備份就被刪除,該怎麼辦?別擔心。使用連續歸檔備份(也稱為 PITR,Point-In-Time Recovery),它除了能做一份完整的基礎備份之外,還會把資料庫每一次的變動記錄(稱為 WAL 日誌)都保留下來。
依照以下步驟連續備份資料庫
步驟 1. 啟用 WAL 歸檔
在 PostgreSQL 的設定檔 postgresql.conf 中,開啟歸檔功能:
步驟 2. 製作基礎備份
使用 pg_basebackup 做一份完整的基礎備份(參考方法 2)
步驟 3. 保留所有 WAL 日誌
從基礎備份完成的那一刻起,所有產生的 WAL 日誌都要保留下來,這樣才能還原到任意時間點。
以上三個方法都能讓您對 PostgreSQL 資料庫備份,但是透過以上操作,您應該很清楚的知道以上方法操作起來很複雜。如果您只是希望備份資料庫或伺服器,對WEB知識不是很了解,邏輯備份、實體備份、連續歸檔備份就不是很適合您。
此時,MultCloud 的網站備份功能就能派上用場了。MultCloud 原本是一款雲端硬碟整合工具,支援 Google Drive、Dropbox、OneDrive 等近 30 種雲端服務 。現在,它還支援網站備份與網站克隆,讓您能直接將一個網站中的數據與資料庫備份到指定的雲端硬碟。
1. 透過您的電子郵件免費註冊MultCloud。
2. 進入 MultCloud 後,點擊左側功能列表中的網站備份。
3. 點擊要備份的網站,然後在「新增網站檔案」、「新增資料庫」中添加您的【伺服器】、【用戶名】、【密碼】。
4. 點擊「備份儲存位置」添加儲存網站資料的雲端硬碟,如 Google 雲端硬碟。
5. 添加完成後,點擊立即備份並等待備份完成。
如果您想讓網站自動備份到Google雲端硬碟,可以點擊「排程」,設定自動備份時間。
可以的,使用 pg_dump 的 -t 參數就能做到。比如,您只想備份「訂單」和「會員」這兩張表,指令如下:
pg_dump -U postgres -d mydb -t 訂單 -t 會員 > 重要資料.sql
注意:如果您備份的資料表之間有外鍵關聯(FK),建議一併備份相關的資料表,否則還原時可能會因為關聯約束而失敗。
您可以使用 pg_dump 加上 -Fc 參數,自動壓縮備份檔案;也可以使用目錄格式 -Fd 將備份拆分成多個小檔案;或者清理備份;您還可以直接使用 MultCloud 進行備份,即使關閉電腦也能提前預約並自動進行備份。
不會。pg_dump 使用 MVCC(多版本並行控制)機制,讀取的是備份啟動時的一致性快照,備份過程中其他使用者仍然可以正常讀寫資料庫。pg_basebackup 同樣支援線上備份,資料庫在備份過程中保持正常運作。
想對 PostgreSQL 資料庫進行保護,防止意外丟失或刪除?可以嘗試本文提供的4種有效方案實行 PostgreSQL 資料庫備份。無論您是想使用最簡單的 pg_dump 邏輯備份、高速的 pg_basebackup 實體備份,還是具備時間點還原能力的 WAL 連續歸檔備份,甚至是結合雲端儲存的自動化備份方案,本文都能提供您完整的操作指引,幫助您根據自身需求打造最合適的資料保護策略。
Google Drive
Google Workspace
OneDrive
OneDrive for Business
SharePoint
Dropbox
Dropbox Business
MEGA
Google Photos
iCloud Photos
FTP
box
box for Business
pCloud
Baidu
Flickr
HiDrive
Yandex
NAS
WebDAV
MediaFire
iCloud Drive
WEB.DE
Evernote
Amazon S3
Wasabi
ownCloud
MySQL
Egnyte
Putio
ADrive
SugarSync
Backblaze
CloudMe
MyDrive
Cubby