导入 SQL 文件

本页介绍了如何将数据从存储在 Cloud Storage 存储分区中的 SQL 文件导入 AlloyDB for PostgreSQL 集群。SQL 文件是包含一系列 SQL 命令的纯文本文件。

您可以取消将数据导入 AlloyDB 集群。如需了解详情,请参阅取消导入操作

准备工作

在开始导入操作之前,请先做好以下准备工作:

  • 确保您的数据库具有足够的可用空间。
  • 导入操作会使用数据库资源,但不会干扰正常的数据库操作,除非集群预配不足。

导入到 AlloyDB 所需的角色和权限

如需将数据从 Cloud Storage 导入到 AlloyDB,启动导入的用户必须拥有以下角色之一:

此外,AlloyDB 集群的服务账号必须拥有以下角色之一:

  • storage.objectViewer IAM 角色
  • 自定义角色,包括以下权限:
    • storage.objects.get

如需有关 IAM 角色的帮助,请参阅 Identity and Access Management

将 SQL 文件导入 AlloyDB 集群

如需使用 SQL 文件将数据导入 AlloyDB 集群,请按以下步骤操作:

  1. 前往集群页面。

    转到集群

  2. 点击集群名称,打开该集群的概览页面。

  3. 点击导入

  4. 选择您要从中导入数据的文件中,输入要用于导入的存储分区和 SQL 文件的路径,或浏览到现有文件。

  5. 选择要导入数据的数据库。

    这样,AlloyDB 会在导入数据之前运行 USE DATABASE 语句。如果您的 SQL 转储文件包含 USE DATABASE 语句,它将替换您在 Google Cloud 控制台中设置的数据库。

  6. 可选:为导入操作指定用户。如果导入文件包含必须由特定用户执行的语句,请使用此字段指定该用户。

  7. 如需开始导入操作,请点击导入

  1. 创建 Cloud Storage 存储桶
  2. 将 SQL 文件上传到您的存储分区。 如需有关将文件上传到存储分区方面的帮助,请参阅上传对象

  3. 使用 gcloud storage buckets add-iam-policy-binding 向存储分区的 AlloyDB 集群服务账号授予 storage.objectViewer IAM 角色

    service-PROJECT_NUMBER@gcp-sa-alloydb.iam.gserviceaccount.com

    进行以下替换:

    • CLUSTER_NAME:集群的名称。
    • REGION:AlloyDB 集群的部署区域。
    • BUCKET_NAME:Cloud Storage 存储分区名称。
    • FILE_NAME:CSV 文件的名称。
    • DATABASE_NAME:集群中数据库的名称。
    • USER:导入操作的用户。
    • TABLE_NAME:数据库中的表。

    如需有关设置 IAM 权限的帮助,请参阅使用 IAM 权限

  4. 导入文件:

    gcloud alloydb clusters import CLUSTER_NAME --region=REGION --database=DATABASE_NAME --gcs-uri='gs://BUCKET_NAME/PATH_TO_SQL_FILE' --user=USERNAME --sql

    如果该命令返回 PERMISSION_DENIED 之类的错误,请检查权限。

    如需了解如何使用 import 命令,请参阅 alloydb import 命令参考页面。

  5. 如果您不需要保留之前设置的 IAM 权限,请使用 gcloud storage buckets remove-iam-policy-binding 移除这些权限。

  1. 创建 Cloud Storage 存储桶
  2. 将 SQL 文件上传到您的存储分区。 如需有关将文件上传到存储分区方面的帮助,请参阅上传对象
  3. 为服务账号授予对 Cloud Storage 存储分区的权限,以便执行导入操作。使用服务账号格式指定要导入到的项目的服务账号。服务账号的格式如下:

    service-PROJECT_NUMBER@gcp-sa-alloydb.iam.gserviceaccount.com
  4. 使用 gcloud storage buckets add-iam-policy-binding 向存储分区的 AlloyDB 集群服务账号授予 storage.objectViewer IAM 角色。如需有关设置 IAM 权限的帮助,请参阅使用 IAM 权限

  5. 导入 SQL 文件。

    使用以下 HTTP 方法和网址:

    POST https://alloydbadmin.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/clusters/CLUSTER_ID:import

    在使用任何请求数据之前,请先进行以下替换:

    • PROJECT_ID:项目 ID。
    • LOCATION_ID:AlloyDB 集群的部署区域。
    • CLUSTER_ID:集群 ID。
    • BUCKET_NAME:Cloud Storage 存储分区名称。
    • PATH_TO_SQL_FILE:SQL 文件的路径。
    • USER:用于导入的用户。
    • DATABASE_NAME:AlloyDB 集群中数据库的名称。

    请求 JSON 正文:

    {
       "gcsUri": "gs://BUCKET_NAME/PATH_TO_SQL_FILE",
       "database": "DATABASE_NAME",
       "user": "USER",
       "sqlImportOptions": {}
    }
    

    如需发送您的请求,请展开以下选项之一:

    将请求正文保存在名为 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/v1/projects/PROJECT_ID/locations/LOCATION_ID/clusters/CLUSTER_ID:import"
    

    将请求正文保存在名为 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/v1/projects/PROJECT_ID/locations/LOCATION_ID/clusters/CLUSTER_ID:import"| Select-Object -Expand Content
    

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

    {
     "name": "projects/project-id/locations/location-id/operations/operation-id",
     "metadata": {
      "@type": "type.googleapis.com/google.cloud.alloydb.v1.OperationMetadata",
      "createTime": "2025-01-04T13:12:32.363393723Z",
      "target": "projects/project-id/locations/location-id/clusters/cluster-id",
      "verb": "import",
      "requestedCancellation": false,
      "apiVersion": "v1"
     },
     "done": false
    }
    

    如需使用其他用户身份执行导入操作,请指定 user 属性。

  6. 如果您不需要保留之前设置的 IAM 权限,请立即移除这些权限。

    如需查看该请求的完整参数列表,请参阅 clusters:import

查看导入操作的状态

如需检查导入操作的状态,请按以下步骤操作:

使用 gcloud alloydb operations describe 命令运行以下命令:

gcloud alloydb operations describe OPERATION_ID --region=REGION

您还可以列出特定操作的详细信息,或者取消特定操作。如需详细了解此命令,请参阅 gcloud alloydb operations 命令参考页面。

使用 GET 方法和以下网址:

GET https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID

如需了解详情,请参阅 get

在使用任何请求数据之前,请先进行以下替换:

  • REGION:AlloyDB 集群的部署区域。
  • PROJECT_ID:项目 ID。
  • OPERATION_ID:导入操作的 ID。如需了解详情,请参阅准备工作

如需发送您的请求,请展开以下选项之一:

执行以下命令:

  curl -X GET \
       -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID
 

执行以下命令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
  -Method GET `
  -Headers $headers `
  -Uri "https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID | Select-Object -Expand Content

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

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

后续步骤