PostgreSQL 備份和災難復原服務

PostgreSQL 是功能強大的開放原始碼物件關聯式資料庫系統,可使用及擴充 SQL 語言,並結合多項功能,安全地儲存及調整最複雜的資料工作負載。

備份和災難復原服務使用的 PostgreSQL 備份 API

  • 磁碟區層級 (Linux 變更區塊追蹤和 LVM 快照) 備份:在使用 Linux 變更區塊追蹤和 LVM 快照執行備份作業時,備份和 DR 會使用 PostgreSQL pg_start_backup(label)pg_stop_backup() 指令。

  • 完整備份 + 增量備份 (檔案式傳統備份):備份和 DR 會使用 PostgreSQL pg_dump 檔案式備份指令。pg_dump 指令沒有擷取資料庫增量變更的選項,因此每個備份都是完整的資料庫轉儲備份。

    資料庫還原作業會透過實際覆寫資料區域來復原資料庫。

  • PostgreSQL 記錄備份:在記錄備份期間,備份和 DR 會實際複製所有 PostgreSQL WAL (WriteAheadLog)。如要清除記錄,備份和 DR 會使用作業系統層級指令。

運作方式:使用 Linux CBT 進行備份和災難復原磁碟區備份

只有變更的區塊會在位元陣列中追蹤:沒有寫入時複製,也沒有大量 I/O 的作業。

以下步驟說明資料備份和復原程序:

  1. 備份和 DR 代理程式會使用 CBT 追蹤資料庫資料區域中的變更區塊。

  2. 代理程式會呼叫資料庫 API,凍結或暫停資料庫,以便備份資料。

  3. 代理程式會建立資料庫資料區域的 LVM 快照,並合成點陣圖。

  4. 代理人呼叫資料庫 API 來解凍資料庫。

  5. 代理程式會將變更的區塊複製到備份/復原設備,然後刪除快照並編目備份。

  6. 應用程式會發出內部快照,並合成某個時間點的虛擬完整備份。

  7. 在資料復原作業中,備份和災難復原服務會立即掛載可重寫的暫存磁碟,並將資料庫上線。

系統會在主要節點上執行靜默或取消靜默指令,以便執行磁區層級快照工作:

select pg_start_backup(<label>);
select pg_stop_backup();

系統會在待命節點上執行靜默和取消靜默指令,以便執行磁區層級快照工作:

如果 PostgreSQL 版本為 10.x 以上版本:

select pg_wal_replay_pause();
select pg_wal_replay_resume();

如果 PostgreSQL 版本為 9.x:

select pg_xlog_replay_pause();
select pg_xlog_replay_resume();

運作方式:檔案式備份

以下步驟說明如何使用檔案型備份映像檔執行資料備份和復原作業:

  1. 備份和災難復原代理已部署在資料庫伺服器中。

  2. 在資料庫伺服器上掛接暫存磁碟。

  3. 使用備份轉存指令叫用完整備份,將備份寫入已掛載的磁碟。

  4. 備份和災難復原會擷取內部快照。系統會在您設定的任何時間表上,直接從檔案系統以類似方式執行記錄備份作業。

  5. 在資料復原作業中,備份和災難復原功能會立即將暫存磁碟掛載到資料庫伺服器,並啟動資料庫還原作業。還原資料庫後,您可以隨時播放記錄。

後續步驟

為備份和 DR 服務準備資料庫

PostgreSQL 備份和 DR 的其他說明文件