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