导入 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. 选择源文件部分,浏览 Cloud Storage 并从存储桶中选择一个 SQL 文件或从本地机器上传一个 SQL 文件进行导入。

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

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

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

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

gcloud

  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 移除这些权限。

REST v1

  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": {}
    }
    

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

    curl(Linux、macOS 或 Cloud Shell)

    将请求正文保存在名为 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"
    

    PowerShell (Windows)

    将请求正文保存在名为 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
    }
    

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

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

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

检查导入操作的状态

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

gcloud

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

gcloud alloydb operations describe OPERATION_ID --region=REGION

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

REST v1

使用 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(Linux、macOS 或 Cloud Shell)

执行以下命令:

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

PowerShell (Windows)

执行以下命令:

$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 实例。

后续步骤