使用 Cloud Storage 备份在单个服务器中克隆数据库集群

本页介绍了如何使用 Cloud Storage 备份在单个服务器中克隆数据库集群。

以下工作流程介绍了克隆步骤:

  1. 配置 pgbackrest.conf 文件以访问 Cloud Storage 备份。
  2. 使用 pgBackRest 命令验证是否可以访问源备份。
  3. 使用 pgBackRest 命令将备份恢复到目标服务器。

准备工作

  • 对存储源数据库集群备份的 Cloud Storage 存储桶的完整路径的访问权限。此路径与您为源数据库集群创建 BackupPlan 资源时使用的路径相同。
  • 系统会创建一个单服务器目标 AlloyDB Omni 数据库集群。如需详细了解如何在 Kubernetes 上安装 AlloyDB Omni,请参阅安装 AlloyDB Omni
  • 确保您已以 postgres 用户身份登录数据库。

在目标服务器上配置 pgBackRest 文件

配置 pgBackRest 文件,以便目标数据库集群能够访问存储源备份的 Cloud Storage 存储桶。

  1. 在目标服务器中,导航到 alloydb-data 目录。

  2. 创建 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 代码库密钥类型选项

在目标服务器中验证源备份

登录目标服务器并运行 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 目录。

  1. 在目标服务器中,停止数据库服务:

Docker

docker stop CONTAINER_NAME

Podman

podman stop CONTAINER_NAME
  1. 最佳实践是将当前数据目录重命名为其他名称:

      mv ~/alloydb-data/data  ~/alloydb-data/data-old
  2. data-restored 临时目录重命名为当前的数据目录:

      mv ~/alloydb-data/data-restored ~/alloydb-data/data
  3. 更新 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'
  1. 在目标服务器中,启动数据库服务:

    Docker

    docker start CONTAINER_NAME

    Podman

    podman start CONTAINER_NAME

数据库服务启动后,您可以连接到主实例并运行查询,以验证数据是否已从备份中恢复。如需了解详情,请参阅连接到单个服务器上的 AlloyDB Omni

后续步骤