從 Linux 上的 AlloyDB Omni 備份 (以 pgBackRest 為基礎) 還原

選取文件版本:

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

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

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

如要進一步瞭解如何設定 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 指令非常靈活,您可透過傳入不同的指令列選項,控管各種選項和功能。如需執行還原的完整指南,請參閱「還原」。