从基于 pgBackRest 的备份恢复 AlloyDB Omni on Linux

选择文档版本:

本页面介绍了如何使用通过 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 实例设置并配置 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 命令非常灵活,您可以通过传入不同的命令行选项来控制一系列选项和功能。如需查看执行恢复的完整指南,请参阅恢复