本页介绍了如何使用 Cloud Storage 备份在单个服务器中克隆数据库集群。
以下工作流程介绍了克隆步骤:
- 配置
pgbackrest.conf
文件以访问 Cloud Storage 备份。 - 使用
pgBackRest
命令验证是否可以访问源备份。 - 使用
pgBackRest
命令将备份恢复到目标服务器。
准备工作
- 对存储源数据库集群备份的 Cloud Storage 存储桶的完整路径的访问权限。此路径与您为源数据库集群创建
BackupPlan
资源时使用的路径相同。 - 系统会创建一个单服务器目标 AlloyDB Omni 数据库集群。如需详细了解如何在 Kubernetes 上安装 AlloyDB Omni,请参阅安装 AlloyDB Omni。
- 确保您已以
postgres
用户身份登录数据库。
在目标服务器上配置 pgBackRest
文件
配置 pgBackRest
文件,以便目标数据库集群能够访问存储源备份的 Cloud Storage 存储桶。
在目标服务器中,导航到
alloydb-data
目录。创建
pgBackRest
配置文件以访问存储在 Cloud Storage 中的备份:$ cat << EOF > /backup/pgbackrest.conf [db] pg1-path=/mnt/disks/pgsql/data-restored pg1-socket-path=/tmp pg1-user=pgbackrest [global] log-path=/obs/pgbackrest log-level-file=info repo1-type=gcs repo1-gcs-bucket=GCS_SOURCE_BACKUP_BUCKET_NAME repo1-path=GCS_SOURCE_BACKUP_BUCKET_PATH repo1-storage-ca-file=/etc/ssl/certs/ca-certificates.crt repo1-retention-full=9999999 repo1-gcs-key-type=auto
替换以下内容:
- GCS_SOURCE_BACKUP_BUCKET_NAME:您在源数据库集群中创建的 Cloud Storage
pgBackRest
存储桶的名称。这不是存储桶的完整网址;请勿在存储桶名称前面添加gs://
。 - GCS_SOURCE_BACKUP_BUCKET_PATH:AlloyDB Omni 操作员将备份写入到源数据库集群的 Cloud Storage 存储桶中的目录的路径。路径必须是绝对路径,且以
/
开头。
repo1-gcs-key-type
设置为auto
,以使用实例的服务账号。如需详细了解其他选项,请参阅 GCS 代码库密钥类型选项。- GCS_SOURCE_BACKUP_BUCKET_NAME:您在源数据库集群中创建的 Cloud Storage
在目标服务器中验证源备份
登录目标服务器并运行 pgBackRest
命令,以验证目标服务器上是否可以访问源数据库集群备份:
Docker
sudo docker exec CONTAINER_NAME pgbackrest --config-path=/mnt/disks/pgsql --stanza=db --repo=1 info
Podman
sudo podman exec CONTAINER_NAME pgbackrest --config-path=/mnt/disks/pgsql --stanza=db --repo=1 info
将 CONTAINER_NAME
替换为新的 AlloyDB Omni 容器的名称,例如 my-omni-1
。
以下是示例响应:
stanza: db
status: ok
cipher: none
db (current)
wal archive min/max (15): 000000010000000000000002/00000001000000000000000D
full backup: 20240213-231400F
timestamp start/stop: 2024-02-13 23:14:00+00 / 2024-02-13 23:17:14+00
wal start/stop: 000000010000000000000003 / 000000010000000000000003
database size: 38.7MB, database backup size: 38.7MB
repo1: backup set size: 4.6MB, backup size: 4.6MB
incr backup: 20240213-231400F_20240214-000001I
timestamp start/stop: 2024-02-14 00:00:01+00 / 2024-02-14 00:00:05+00
wal start/stop: 00000001000000000000000D / 00000001000000000000000D
database size: 38.7MB, database backup size: 488.3KB
repo1: backup set size: 4.6MB, backup size: 84.2KB
backup reference list: 20240213-231400F
响应中的时间戳用于恢复完整备份,或从恢复期限内的时间点恢复。
在目标服务器中恢复备份
确定要恢复的备份或要恢复的时间点后,请在目标服务器中运行 pgBackRest
命令。如需详细了解这些命令,请参阅恢复命令。
以下是一些 pgBackRest
恢复命令示例:
使用备份进行恢复
pgbackrest --config-path=/mnt/disks/pgsql --stanza=db --repo=1 restore --set=20240213-231400F --type=immediate --target-action=promote --delta --link-all --log-level-console=info
从某个时间点开始恢复
pgbackrest --config-path=/mnt/disks/pgsql --stanza=db --repo=1 restore --target="2024-01-22 11:27:22" --type=time --target-action=promote --delta --link-all --log-level-console=info
将数据复制到目标服务器
恢复命令成功完成后,您可以将数据从 /mnt/disks/pgsql/data-restored
临时目录复制到当前的 /alloydb-data/data
目录。
- 在目标服务器中,停止数据库服务:
Docker
docker stop CONTAINER_NAME
Podman
podman stop CONTAINER_NAME
最佳实践是将当前数据目录重命名为其他名称:
mv ~/alloydb-data/data ~/alloydb-data/data-old
将
data-restored
临时目录重命名为当前的数据目录:mv ~/alloydb-data/data-restored ~/alloydb-data/data
更新
postgresql.auto.conf
文件中的pg1-path
值以加载已恢复的数据:
vim ~/alloydb-data/data/postgresql.auto.conf
# Verify postgresql.auto.conf.
# Do not edit this file manually!
# It will be overwritten by the ALTER SYSTEM command.
# Recovery settings generated by pgBackRest restore on 2024-03-13 20:47:11
restore_command = 'pgbackrest --config-path=/mnt/disks/pgsql --pg1-path=/mnt/disks/pgsql/data --repo=1 --stanza=db archive-get %f "%p"'
recovery_target = 'immediate'
recovery_target_action = 'promote'
recovery_target_timeline = 'current'
在目标服务器中,启动数据库服务:
Docker
docker start CONTAINER_NAME
Podman
podman start CONTAINER_NAME
数据库服务启动后,您可以连接到主实例并运行查询,以验证数据是否已从备份中恢复。如需了解详情,请参阅连接到单个服务器上的 AlloyDB Omni。