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