从 Cloud SQL for PostgreSQL 迁移到 AlloyDB for PostgreSQL

本页介绍了如何通过将 Cloud SQL 备份复制到 AlloyDB for PostgreSQL 集群来迁移 Cloud SQL for PostgreSQL 实例。 将 Cloud SQL 备份复制到 AlloyDB 集群后,您可以快速将数据加载到 AlloyDB for PostgreSQL,以便评估或迁移到 AlloyDB。

本页面假定您熟悉 Cloud SQL。如果您刚接触 AlloyDB,请参阅 AlloyDB 概览

如需了解如何使用持续数据复制将数据从 Cloud SQL 迁移到 AlloyDB,请参阅 将 Database Migration Service for PostgreSQL 迁移到 AlloyDB

不支持:

  • 跨项目和跨区域恢复
  • 使用客户管理的加密密钥 (CMEK) 的实例
  • 使用 Identity and Access Management (IAM) 群组身份验证的实例

准备工作

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Enable the AlloyDB, Compute Engine, and Service Networking APIs.

    Enable the APIs

  7. 请确保您已满足以下要求:

所需的角色

如需获得将 Cloud SQL for PostgreSQL 备份复制到 AlloyDB 集群所需的权限,请为自己授予项目的以下 IAM 角色:

将 Cloud SQL 备份复制到 AlloyDB 集群

将 Cloud SQL 备份复制到 AlloyDB标准集群会将备份恢复到 AlloyDB 上的同一版本 PostgreSQL,例如,PostgreSQL 14 Cloud SQL 备份会恢复到 PostgreSQL 14 标准集群。请注意,扩展程序版本和 PostgreSQL 次要版本可能不同。

从 Cloud SQL 复制备份仅支持配置 AlloyDB标准 集群中支持的项目。

如需将 Cloud SQL 备份复制到 AlloyDB标准试用集群,请按以下步骤操作:

控制台

  1. 在 Google Cloud 控制台中,前往 Clusters 页面。

    转到“集群”

  2. 点击迁移数据,然后选择从 Cloud SQL 备份复制
  3. 从 Cloud SQL 备份复制页面中,启用所需的 API。如果您已启用这些 API,则无需重新启用。
  4. 选择集群类型页面上,选择预配的集群
  5. 点击选择集群类型
  6. 选择要从中复制备份的 Cloud SQL 实例,然后点击选择实例。您可以过滤 Cloud SQL 实例。
    系统仅显示兼容的数据库版本。副本没有备份,也不会显示在可用实例列表中。
  7. 选择要从哪个备份导入,然后点击选择备份。此页面会显示最近 1,000 个备份。
  8. 创建预配的集群页面中,输入您的网络信息。系统会默认填充集群 ID,但您也可以自定义预配的集群。
  9. 点击创建集群

操作完成后,系统会自动创建主实例。您会看到一个新的 AlloyDB 集群,其中包含从您选择的 Cloud SQL for PostgreSQL 备份中复制的数据。

当您将 Cloud SQL for PostgreSQL 备份复制到 AlloyDB 集群时,如果数据库标志同时位于 Cloud SQL for PostgreSQL 和 AlloyDB 中,则系统会迁移数据库标志。系统不会自动迁移资源级权限。复制完成后,您必须手动设置权限以及因不匹配而未迁移的数据库标志。

您可以在创建预配的集群页面中查看 AlloyDB 支持 Cloud SQL for PostgreSQL 中的哪些数据库标志。

REST API

  1. 如需获取要从中恢复备份的实例的备份列表,请调用 backupsRuns.list 方法:
          GET "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/backupRuns"
          

    替换以下内容:

    • PROJECT_ID:项目 ID。
    • INSTANCE_ID:实例 ID。

    请求 JSON 正文:

          {
            "kind": string,
            "items": [
              {
                object (BackupRun)
              }
            ],
            "nextPageToken": string
          }
          

    如需发送请求,请使用以下任一方式:

    curl(Linux、macOS 或 Cloud Shell)

    以下命令假定您已使用您的用户账号通过运行 gcloud initgcloud auth login 登录 Google Cloud CLI,或者使用了 Cloud Shell,这会使您自动登录 gcloud CLI

    您可以运行 gcloud auth list 来检查活跃的账号。

    将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

            curl -X GET \
                   -H "Authorization: Bearer $(gcloud auth print-access-token)" \
                   -H "Content-Type: application/json; charset=utf-8" \
                   "https://sqladmin.googleapis.com//sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/backupRuns"
            

    PowerShell (Windows)

    以下命令假定您已使用您的用户账号通过运行 gcloud initgcloud auth login 登录 gcloud CLI,或者使用了 Cloud Shell,这会使您自动登录 gcloud CLI

    您可以通过运行 gcloud auth list 来检查活跃账号。

    将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

             $cred = gcloud auth print-access-token
             $headers = @{ "Authorization" = "Bearer $cred" }
             Invoke-WebRequest `
              -Method GET `
              -Headers $headers `
              -ContentType: "application/json; charset=utf-8" `
              -Uri
              "https://sqladmin.googleapis.com//sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/backupRuns"|Select-Object -Expand Content
          

    您会收到类似以下内容的 JSON 响应:

    响应

    如果成功,响应正文将包含 BackupRun 的列表。

    API 响应会将实例的备份列表作为数组列表返回,其中包括 "id": string,

  2. 调用 restoreFromCloudSQL 方法:

            POST https://alloydb.googleapis.com/v1beta/projects/PROJECT_ID/locations/REGION/clusters:restoreFromCloudSQL
          

    替换以下内容:

    • PROJECT_ID:项目 ID。
    • REGION:AlloyDB 集群的部署区域。

    请求 JSON 正文:

          {
            "clusterId": string,
            "cluster": {
              "databaseVersion": "POSTGRES_14/POSTGRES_15/POSTGRES_16",
              "subscriptionType": "STANDARD"
            },
            // Union field source can be only one of the following:
            "cloudsqlBackupRunSource": {
              object (CloudSQLBackupRunSource)
            }
            // End of list of possible types for union field source.
          }
          

    如需发送请求,请使用以下任一方式:

    curl(Linux、macOS 或 Cloud Shell)

    以下命令假定您已使用您的用户账号通过运行 gcloud initgcloud auth login 登录 gcloud CLI,或者使用了 Cloud Shell,这会使您自动登录 gcloud CLI

    您可以通过运行 gcloud auth list 来检查活跃账号。

    将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

            curl -X POST \
                   -H "Authorization: Bearer $(gcloud auth print-access-token)" \
                   -H "Content-Type: application/json; charset=utf-8" \
                   -d @request.json \
                   "https://alloydb.googleapis.com/v1beta/projects/PROJECT_ID/locations/REGION/clusters:restoreFromCloudSQL"
          

    PowerShell (Windows)

    以下命令假定您已使用您的用户账号通过运行 gcloud initgcloudauth login 登录 gcloud CLI,或者使用了 Cloud Shell,这会使您自动登录 gcloud CLI

    您可以通过运行 gcloud auth list 来检查活跃账号。

    将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

            $cred = gcloud auth print-access-token
            $headers = @{ "Authorization" = "Bearer $cred" }
            Invoke-WebRequest `
              -Method POST `
              -Headers $headers `
              -ContentType: "application/json; charset=utf-8" `
              -InFile request.json `
              -Uri "https://alloydb.googleapis.com/v1beta/projects/PROJECT_ID/locations/REGION/clusters:restoreFromCloudSQL"|Select-Object -Expand Content
          

    您会收到类似以下内容的 JSON 响应:

    响应

    如果成功,则响应正文包含一个 Operation 实例。

    系统会在指定的项目和位置创建一个新集群,并从 CloudSQLBackupRunSource 消息中指向的备份中恢复一个卷。

  3. 当集群处于 READY 状态时,通过调用 projects.locationsinstances.create 方法创建主实例:
          POST https://alloydb.googleapis.com/v1beta/{parent=projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID}/instances
          

    替换以下内容:

    • PROJECT_ID:项目 ID。
    • REGION:AlloyDB 集群的部署区域。
    • CLUSTER_ID:集群 ID。

    请求 JSON 正文:

            {
              "instanceId": "string",
              "instance": {
                "object": "Instance"
              }
            }
          

    请求正文包含一个 Instance 实例。

    如需发送请求,请使用以下任一方式:

    curl(Linux、macOS 或 Cloud Shell)

    以下命令假定您已使用您的用户账号通过运行 gcloud initgcloud auth login 登录 gcloud CLI,或者使用了 Cloud Shell,这会使您自动登录 gcloud CLI

    您可以通过运行 gcloud auth list 来检查活跃账号。

    将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

            curl -X POST \
                 -H "Authorization: Bearer $(gcloud auth print-access-token)" \
                 -H "Content-Type: application/json; charset=utf-8" \
                 -d @request.json \
                 "https://alloydb.googleapis.com/v1beta/projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID/instances"
          

    PowerShell (Windows)

    以下命令假定您已使用您的用户账号通过运行 gcloud initgcloud auth login 登录 gcloud CLI,或者使用了 Cloud Shell,这会使您自动登录 gcloud CLI

    您可以通过运行 gcloud auth list 来检查活跃账号。

    将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

             $cred = gcloud auth print-access-token
             $headers = @{ "Authorization" = "Bearer $cred" }
             Invoke-WebRequest `
               -Method POST `
               -Headers $headers `
               -ContentType: "application/json; charset=utf-8" `
               -InFile request.json `
               -Uri "https://alloydb.googleapis.com/v1beta/projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID/instances"|Select-Object -Expand Content
          

    您会收到类似以下内容的 JSON 响应:

    响应

    如果成功,响应正文将包含一个新创建的 Operation 实例。

  4. 实例更新为 READY 状态后,请连接到该实例,然后访问 Cloud SQL 快照中恢复的数据。

后续步骤