使用 pgBackRest 還原 AlloyDB Omni 叢集

本頁說明如何使用 pgBackRest (AlloyDB Omni 隨附的開放原始碼備份解決方案) 建立的備份檔,還原 AlloyDB Omni 叢集。

AlloyDB Omni 與 PostgreSQL 相容,因此 pgBackRest 手冊所述的資料還原指令和技術也適用於 AlloyDB Omni。本頁面會示範一些常見的復原工作,並提供相關指令範例。

啟用 TDE 的叢集也支援使用 pgBackRest 備份及還原。詳情請參閱「建立啟用 TDE 的叢集」。

如要進一步瞭解如何設定 pgBackRest 來搭配 AlloyDB Omni 使用,請參閱「為 AlloyDB Omni 設定 pgBackRest」。

如需 Kubernetes 相關資訊,請參閱「在 Kubernetes 中備份及還原」。

事前準備

還原 AlloyDB Omni 叢集前,請確認您具備下列條件:

  • 目的地檔案系統有足夠的磁碟空間,可儲存還原的 AlloyDB Omni 資料庫叢集。

  • 還原資料庫執行個體使用的 AlloyDB Omni 主要版本,與原始來源資料庫執行個體相同。

    如要查看 PostgreSQL 版本,請執行下列指令:

    Docker

    docker exec -u postgres CONTAINER_NAME psql -c "SELECT version();"
    

    Docker

    docker exec -u postgres CONTAINER_NAME psql -c "SELECT version();"
    

    Podman

    podman exec -u postgres CONTAINER_NAME psql -c "SELECT version();"
    

    Podman

    podman exec -u postgres CONTAINER_NAME psql -c "SELECT version();"
    

    替換下列變數:

    • CONTAINER_NAME:容器名稱。例如:my-omni-1。

    如要檢查 pgBackRest 版本,請執行下列指令:

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest version
    

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest version
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest version
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest version
    

    替換下列變數:

    • CONTAINER_NAME:容器名稱。例如:my-omni-1。

    如果目標容器的 PostgreSQL 和/或 pgBackRest 版本不同,則必須建立版本相符的新目標容器。如果無法這麼做,則必須使用替代方法,例如 PostgreSQL 隨附的 pg_dump 或 pg_dumpall 公用程式,跨版本複製資料庫。

  • 停止 AlloyDB Omni 容器

    如要模擬 AlloyDB Omni 資料庫叢集無法使用的情況,請停止容器。

    Docker

    docker stop CONTAINER_NAME
    docker rm CONTAINER_NAME

    Docker

    docker stop CONTAINER_NAME
    docker rm CONTAINER_NAME

    Podman

    podman stop CONTAINER_NAME
    podman rm CONTAINER_NAME

    Podman

    podman stop CONTAINER_NAME
    podman rm CONTAINER_NAME

    替換下列變數:

    • CONTAINER_NAME:您為容器使用的名稱。例如:my-omni-1。

    建立閒置的 AlloyDB Omni 容器

    Docker

    docker run -d --name CONTAINER_NAME \
    -v DATA_DIR:/var/lib/postgresql/data \
    -v BACKUP_DIR:/var/lib/postgresql/backups \
    -p HOST_PORT:5432 \
    --restart=always \
    google/alloydbomni:latest sleep infinity
    

    Docker

    docker run -d --name CONTAINER_NAME \
    -v DATA_DIR:/var/lib/postgresql/data \
    -v BACKUP_DIR:/var/lib/postgresql/backups \
    -p HOST_PORT:5432 \
    --restart=always \
    google/alloydbomni:latest sleep infinity
    

    Podman

    podman run -d --name CONTAINER_NAME \
    -v DATA_DIR:/var/lib/postgresql/data \
    -v BACKUP_DIR:/var/lib/postgresql/backups \
    -p HOST_PORT:5432 \
    --restart=always \
    docker.io/google/alloydbomni:latest sleep infinity
    

    Podman

    podman run -d --name CONTAINER_NAME \
    -v DATA_DIR:/var/lib/postgresql/data \
    -v BACKUP_DIR:/var/lib/postgresql/backups \
    -p HOST_PORT:5432 \
    --restart=always \
    docker.io/google/alloydbomni:latest sleep infinity
    

    請替換下列變數:

    • CONTAINER_NAME:您為容器使用的名稱。例如:my-omni-1。
    • DATA_DIR:儲存資料的主機目錄路徑。
    • BACKUP_DIR:儲存備份的外部目錄路徑。
    • HOST_PORT:主體機器上的 TCP 通訊埠,容器應將自己的通訊埠 5432 發布至該通訊埠。如要一併在主體機器上使用 PostgreSQL 預設通訊埠,請指定 5432。

    移除資料目錄

    如要清除 AlloyDB Omni 資料庫叢集,請移除資料目錄。

    Docker

    docker exec CONTAINER_NAME sh -c "rm -rf /var/lib/postgresql/data/*"
    

    Docker

    docker exec CONTAINER_NAME sh -c "rm -rf /var/lib/postgresql/data/*"
    

    Podman

    podman exec CONTAINER_NAME sh -c "rm -rf /var/lib/postgresql/data/*"
    

    Podman

    podman exec CONTAINER_NAME sh -c "rm -rf /var/lib/postgresql/data/*"
    

    替換下列變數:

    • CONTAINER_NAME:容器名稱。例如:my-omni-1。

    確認備份可見

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=STANZA_NAME \
    info
    

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=STANZA_NAME \
    info
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=STANZA_NAME \
    info
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=STANZA_NAME \
    info
    

    請替換下列變數:

    • CONTAINER_NAME:容器名稱。例如:my-omni-1。
    • STANZA_NAME:您建立的段落名稱。例如:my-stanza。

    還原備份

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=STANZA_NAME \
    restore
    

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=STANZA_NAME \
    restore
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=STANZA_NAME \
    restore
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=STANZA_NAME \
    restore
    

    請替換下列變數:

    CONTAINER_NAME:容器名稱。例如:my-omni-1。 * STANZA_NAME:您建立的節名稱。例如:my-stanza。

    移除閒置的 AlloyDB Omni 容器

    Docker

    docker kill CONTAINER_NAME
    docker rm CONTAINER_NAME

    Docker

    docker kill CONTAINER_NAME
    docker rm CONTAINER_NAME

    Podman

    podman kill CONTAINER_NAME
    podman rm CONTAINER_NAME

    Podman

    podman kill CONTAINER_NAME
    podman rm CONTAINER_NAME

    替換下列變數:

    • CONTAINER_NAME:容器名稱。例如:my-omni-1。

    建立 AlloyDB Omni 容器

    Docker

    docker run -d --name CONTAINER_NAME \
    -v DATA_DIR:/var/lib/postgresql/data \
    -v BACKUP_DIR:/var/lib/postgresql/backups \
    -p HOST_PORT:5432 \
    --restart=always \
    google/alloydbomni:latest
    

    Docker

    docker run -d --name CONTAINER_NAME \
    -v DATA_DIR:/var/lib/postgresql/data \
    -v BACKUP_DIR:/var/lib/postgresql/backups \
    -p HOST_PORT:5432 \
    --restart=always \
    google/alloydbomni:latest
    

    Podman

    podman run -d --name CONTAINER_NAME \
    -v DATA_DIR:/var/lib/postgresql/data \
    -v BACKUP_DIR:/var/lib/postgresql/backups \
    -p HOST_PORT:5432 \
    --restart=always \
    docker.io/google/alloydbomni:latest
    

    Podman

    podman run -d --name CONTAINER_NAME \
    -v DATA_DIR:/var/lib/postgresql/data \
    -v BACKUP_DIR:/var/lib/postgresql/backups \
    -p HOST_PORT:5432 \
    --restart=always \
    docker.io/google/alloydbomni:latest
    

    請替換下列變數:

    • CONTAINER_NAME:您為容器使用的名稱。例如:my-omni-1。
    • DATA_DIR:儲存資料的主機目錄路徑。
    • BACKUP_DIR:儲存備份的外部目錄路徑。
    • HOST_PORT:主機上的 TCP 通訊埠,容器應將自己的通訊埠 5432 發布至該通訊埠。如要在主機上使用 PostgreSQL 預設通訊埠,請指定 5432。

      確認 AlloyDB Omni 已啟動

      Docker

      docker logs -f CONTAINER_NAME
      

      Docker

      docker logs -f CONTAINER_NAME
      

      Podman

      podman logs -f CONTAINER_NAME
      

      Podman

      podman logs -f CONTAINER_NAME
      

      替換下列變數:

      • CONTAINER_NAME:容器名稱。例如:my-omni-1。

      其他選項

      pgBackRest restore 指令非常靈活,您可以透過傳入不同的指令列選項,控制一系列選項和功能。如需執行還原作業的完整指南,請參閱「還原」。