使用 pgBackRest 恢复 AlloyDB Omni 集群

本页介绍了如何使用 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 实用程序)来跨版本复制数据库。如需了解详情,请参阅导出 DMP 文件

停止 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 命令非常灵活,具有一系列选项和功能,您可以通过传入不同的命令行选项来控制这些选项和功能。如需查看有关执行恢复的完整指南,请参阅恢复