使用 Cloud Storage 備份,在單一伺服器中複製資料庫叢集

選取說明文件版本:

本頁說明如何使用 Cloud Storage 備份,在單一伺服器中複製資料庫叢集。

以下工作流程說明複製步驟:

  1. 設定 pgbackrest.conf 檔案,以存取 Cloud Storage 備份。
  2. 使用 pgBackRest 指令確認可存取來源備份。
  3. 使用 pgBackRest 指令將備份還原至目標伺服器。

事前準備

  • 存取來源資料庫叢集備份所在的 Cloud Storage 值區完整路徑。這個路徑與您為來源資料庫叢集建立 BackupPlan 資源時使用的路徑相同。
  • 系統會建立單一伺服器目標 AlloyDB Omni 資料庫叢集。如要進一步瞭解如何在 Kubernetes 上安裝 AlloyDB Omni,請參閱「安裝 AlloyDB Omni」。
  • 確認您以 postgres 使用者身分登入資料庫。

在目標伺服器上設定 pgBackRest 檔案

設定 pgBackRest 檔案,讓目標資料庫叢集存取來源備份所在的 Cloud Storage bucket。

  1. 在目標伺服器中,前往 alloydb-data 目錄。

  2. 建立 pgBackRest 設定檔,存取儲存在 Cloud Storage 中的備份:

      $ cat << EOF > /backup/pgbackrest.conf
      [db]
      pg1-path=/mnt/disks/pgsql/data-restored
      pg1-socket-path=/tmp
      pg1-user=pgbackrest
      [global]
      log-path=/obs/pgbackrest
      log-level-file=info
      repo1-type=gcs
      repo1-gcs-bucket=GCS_SOURCE_BACKUP_BUCKET_NAME
      repo1-path=GCS_SOURCE_BACKUP_BUCKET_PATH
      repo1-storage-ca-file=/etc/ssl/certs/ca-certificates.crt
      repo1-retention-full=9999999
      repo1-gcs-key-type=auto

    更改下列內容:

    • GCS_SOURCE_BACKUP_BUCKET_NAME:您在來源資料庫叢集中建立的 Cloud Storage pgBackRest bucket 名稱。這不是 bucket 的完整網址,請勿在 bucket 名稱加上 gs:// 前置字元。
    • GCS_SOURCE_BACKUP_BUCKET_PATH:AlloyDB Omni 運算子將備份寫入的目錄路徑,位於來源資料庫叢集的 Cloud Storage bucket 中。路徑必須是絕對路徑,開頭為 /

    repo1-gcs-key-type 設為 auto,使用執行個體的服務帳戶。如要進一步瞭解其他選項,請參閱「GCS 存放區金鑰類型選項」。

在目標伺服器中驗證來源備份

登入目標伺服器並執行 pgBackRest 指令,確認目標伺服器可存取來源資料庫叢集備份:

Docker

sudo docker exec CONTAINER_NAME pgbackrest --config-path=/mnt/disks/pgsql --stanza=db --repo=1 info

Podman

sudo podman exec CONTAINER_NAME pgbackrest --config-path=/mnt/disks/pgsql --stanza=db --repo=1 info

CONTAINER_NAME 替換為新的 AlloyDB Omni 容器名稱,例如 my-omni-1

以下是回應範例:

    stanza: db
      status: ok
      cipher: none
      db (current)
          wal archive min/max (15): 000000010000000000000002/00000001000000000000000D
          full backup: 20240213-231400F
              timestamp start/stop: 2024-02-13 23:14:00+00 / 2024-02-13 23:17:14+00
              wal start/stop: 000000010000000000000003 / 000000010000000000000003
              database size: 38.7MB, database backup size: 38.7MB
              repo1: backup set size: 4.6MB, backup size: 4.6MB
          incr backup: 20240213-231400F_20240214-000001I
              timestamp start/stop: 2024-02-14 00:00:01+00 / 2024-02-14 00:00:05+00
              wal start/stop: 00000001000000000000000D / 00000001000000000000000D
              database size: 38.7MB, database backup size: 488.3KB
              repo1: backup set size: 4.6MB, backup size: 84.2KB
              backup reference list: 20240213-231400F

回覆中的時間戳記可用於還原完整備份,或從復原時間範圍內的時間點還原。

在目標伺服器中還原備份

找出要還原的備份或時間點後,請在目標伺服器中執行 pgBackRest 指令。如要進一步瞭解這些指令,請參閱「還原指令」。

以下是部分 pgBackRest 還原指令範例:

  • 從備份還原

    pgbackrest --config-path=/mnt/disks/pgsql --stanza=db --repo=1 restore --set=20240213-231400F --type=immediate --target-action=promote --delta --link-all --log-level-console=info
  • 從某個時間點還原

    pgbackrest --config-path=/mnt/disks/pgsql --stanza=db --repo=1 restore --target="2024-01-22 11:27:22" --type=time --target-action=promote --delta --link-all --log-level-console=info

將資料複製到目標伺服器

還原指令順利完成後,您可以將資料從/mnt/disks/pgsql/data-restored臨時目錄複製到目前的/alloydb-data/data目錄。

  1. 在目標伺服器中停止資料庫服務:

Docker

docker stop CONTAINER_NAME

Podman

podman stop CONTAINER_NAME
  1. 最佳做法是將目前的資料目錄重新命名為其他名稱:

      mv ~/alloydb-data/data  ~/alloydb-data/data-old
  2. data-restored 臨時目錄重新命名為目前的資料目錄:

      mv ~/alloydb-data/data-restored ~/alloydb-data/data
  3. postgresql.auto.conf 檔案中更新 pg1-path 值,載入還原的資料:

    vim ~/alloydb-data/data/postgresql.auto.conf
    # Verify postgresql.auto.conf.
    # Do not edit this file manually!
    # It will be overwritten by the ALTER SYSTEM command.
    # Recovery settings generated by pgBackRest restore on 2024-03-13 20:47:11
    restore_command = 'pgbackrest --config-path=/mnt/disks/pgsql --pg1-path=/mnt/disks/pgsql/data --repo=1 --stanza=db archive-get %f "%p"'
    recovery_target = 'immediate'
    recovery_target_action = 'promote'
    recovery_target_timeline = 'current'
  1. 在目標伺服器中啟動資料庫服務:

    Docker

    docker start CONTAINER_NAME

    Podman

    podman start CONTAINER_NAME

資料庫服務啟動後,您可以連線至主要執行個體並執行查詢,確認資料已從備份還原。詳情請參閱「在單一伺服器上連線至 AlloyDB Omni」。

後續步驟