导出 SQL 文件

本页介绍了如何将数据从 AlloyDB for PostgreSQL 集群导出到 SQL 转储文件。

如需了解如何将整个数据库从受支持的数据库服务器迁移到新的 AlloyDB 实例,请参阅使用 Database Migration Service 将数据库迁移到 AlloyDB。如果要导出数据以通过导出的文件创建新实例,请考虑从存储的备份恢复集群

您可以取消从 AlloyDB for PostgreSQL 集群导出数据。如需了解详情,请参阅取消导出数据

准备工作

  • 在开始导出操作之前,请注意,导出操作会使用数据库资源,但不会干扰标准数据库操作,除非实例预配不足。
  • 如果目标存储桶与源集群位于不同区域,则会产生区域间数据传输费用。如需了解详情,请参阅 AlloyDB for PostgreSQL 价格
  • 如果对象名称以 .gz 扩展名结尾,则启用压缩。然后,系统会将该对象以 .gz 格式导出到 Cloud Storage。
  • 可以并行运行多个导出操作。

从 AlloyDB 导出所需的角色和权限

如需将数据从 AlloyDB 导出到 Cloud Storage,启动导出的用户必须拥有以下 Identity and Access Management (IAM) 角色之一:

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

  • storage.objectAdmin IAM 角色
  • 包括 storage.objects.create 权限的自定义角色

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

将 AlloyDB 数据导出到 SQL 转储文件

使用 AlloyDB 执行导出时(无论是从 gcloud CLI 还是从 API 导出),都要使用 pg_dump 实用程序并指定必需选项,以确保生成的导出文件可重新导入 AlloyDB。

如需将 AlloyDB 集群上的数据库数据导出到 Cloud Storage 存储桶中的 SQL 转储文件,请按以下步骤操作:

gcloud

  1. 创建 Cloud Storage 存储桶
  2. 使用提供的格式来识别要从中导出数据的项目的服务账号。服务账号的格式如下所示:

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

    向服务账号授予对 Cloud Storage 存储桶的权限,以便执行导出操作。

  3. 使用 gcloud storage buckets add-iam-policy-binding 向服务账号授予 storage.objectAdmin IAM 角色。如需有关设置 IAM 权限的帮助,请参阅使用 IAM 权限

  4. 将数据库导出到您的 Cloud Storage 存储桶。以下列出了以 SQL 转储格式导出数据的选项:

    • --async(可选):立即返回,而无需等待正在进行的操作完成。
    • --tables(可选):要从中导出数据的表。
    • --schema-only(可选):如果设置了此参数,则仅导出架构。
    • --clean-target-objects(可选):如果设置,则在输出用于创建这些对象的命令之前,输出用于 DROP 所有已转储数据库对象的命令。
    • --if-exist-target-objects(可选):如果设置了此属性,则在 --clean-target-objects 模式下丢弃对象之前,请使用 DROP ... IF EXISTS 命令检查对象是否存在。

    如需使用这些功能,请在 gcloud 命令中添加这些选项。如果您只想导出对象定义(架构),而不导出任何数据,请使用 –-schema-only 标志。如需指定要导出哪些表,请使用 --tables=TABLE_NAMES 标志。您可以指定以逗号分隔的表名称值或通配符模式,以指定多个表。

    否则,请从以下命令中移除这些参数:

    gcloud alloydb clusters export CLUSTER_NAME
      --region=REGION
      --database=DATABASE_NAME
      --gcs-uri="gs://BUCKET_NAME/OBJECT_NAME"
      --tables=TABLE_NAMES
      --schema-only
      --clean-target-objects
      --if-exist-target-objects
      --sql

    alloydb clusters export 命令不包含触发器或存储过程,但包含视图。如需导出触发器或存储过程,请使用 pg_dump 实用程序。

    如需详细了解如何使用 alloydb clusters export 命令,请参阅 alloydb clusters export 命令参考页面。

  5. 如果您不需要保留之前设置的 IAM 角色,请立即撤消该角色。

REST v1

  1. 为导出创建一个存储桶:

    gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_NAME
  2. 使用服务账号格式来标识要导出数据的项目的服务账号。

    服务账号的格式如下所示:

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

    为服务账号授予对 Cloud Storage 存储桶的权限,以便执行导出操作。

  3. 使用 gcloud storage buckets add-iam-policy-binding 向服务账号授予 storage.objectAdmin IAM 角色。如需有关设置 IAM 权限的帮助,请参阅使用 IAM 权限

  4. 导出数据库。

    使用以下 HTTP 方法和网址:

    POST https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID:export

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

    • PROJECT_ID:项目 ID。
    • REGION:AlloyDB 集群的部署区域。
    • CLUSTER_ID:集群 ID。
    • BUCKET_NAME:Cloud Storage 存储桶名称。
    • PATH_TO_SQL_FILE:SQL 转储文件的路径。
    • DATABASE_NAME:AlloyDB 实例中数据库的名称。
    • TABLES:要导出的表。
    • SCHEMA_ONLY:如果为 true,则仅导出架构。
    • CLEAN_TARGET_OBJECTS:如果为 true,则在输出用于创建这些对象的命令之前,输出用于 DROP 所有已转储的数据库对象的命令。
    • IF_EXIST_TARGET_OBJECTS:如果为 true,请先使用 DROP ... IF EXISTS 命令检查对象是否存在,然后再在 clean_target_objects 模式下将其丢弃。

    如需使用这些功能,请将这些参数的值设置为 true。否则,请将其值设置为 false。如果您只想导出对象定义(架构),而不导出任何数据,请使用 schema_only 标志。如需指定要导出哪些表,请使用 tables 字段。您可以通过提供逗号分隔的表名称列表或在模式中写入通配符来选择多个表。

    请求 JSON 正文:

    {
      "gcs_destination": {
        "uri": "gs://BUCKET_NAME/PATH_TO_SQL_FILE"
      },
      "database": "DATABASE_NAME",
      "sql_export_options": {
        "schema_only": true,
        "tables": [
         "TABLE1",
         "TABLE2"
        ],
        "clean_target_objects": false,
        "if_exist_target_objects": true
      }
    }
    

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

    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/REGION/clusters/CLUSTER_ID:export"
       

    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/REGION/clusters/CLUSTER_ID:export"| Select-Object -Expand Content
       

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

    响应

    {
      "name": "projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.alloydb.v1.OperationMetadata",
        "createTime": "2024-09-17T06:05:31.244428646Z",
        "target": "projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID",
        "verb": "export",
        "requestedCancellation": false,
        "apiVersion": "v1"
      },
      "done": false
    }
    
  5. 如果您不需要保留之前设置的 IAM 角色,请立即移除该角色。

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

后续步骤