使用 pgBackRest 還原 AlloyDB Omni 叢集

選取說明文件版本:

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

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

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

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

事前準備

還原 AlloyDB Omni 叢集前,請確認您已備妥下列項目:

  • 為 AlloyDB Omni 執行個體設定及配置 pgBackRest

  • 目的地檔案系統有足夠的磁碟空間,可儲存還原的 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_dumppg_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:容器應將自己的通訊埠 5432 發布至主機的 TCP 通訊埠。如要在主機上使用 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:容器應將自己的通訊埠 5432 發布至主機的 TCP 通訊埠。如要在主機上使用 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 指令非常靈活,您可透過傳入不同的指令列選項,控管各種選項和功能。如需執行還原的完整指南,請參閱還原