使用 BAK 文件和事务日志文件导出和导入

本页介绍了如何使用 BAK 文件将数据导出和导入 Cloud SQL 实例,以及如何使用事务日志文件将数据导入 Cloud SQL 实例。

准备工作

导出操作会使用数据库资源,但不会干扰正常的数据库操作,除非实例预配不足。

如需了解最佳做法,请参阅导入和导出数据的最佳做法

完成导入操作后,请验证结果。

从 Cloud SQL for SQL Server 导出数据

Cloud SQL 支持导出内置 BAK 文件。

如果您要使用导出的文件创建新实例,请考虑使用备份恢复到不同实例克隆实例

Cloud SQL 会在导出操作期间对所选数据库执行完整备份

从 Cloud SQL for SQL Server 导出所需的角色和权限

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

此外,Cloud SQL 实例的服务账号必须拥有以下角色之一:

  • storage.objectAdmin Identity and Access Management (IAM) 角色
  • 包括以下权限的自定义角色:
    • storage.objects.create
    • storage.objects.list(仅用于条带式导出)
    • storage.objects.delete(仅用于条带式导出)
    • storage.buckets.getIamPolicy(仅适用于导出交易日志)
    • storage.buckets.setIamPolicy(仅适用于导出交易日志)

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

将数据从 Cloud SQL for SQL Server 导出到 BAK 文件

控制台

  1. 在 Google Cloud 控制台中,转到 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 如需打开实例的概览页面,请点击实例名称。
  3. 点击导出
  4. 文件格式部分中,点击 BAK
  5. 要导出的数据部分,使用下拉菜单选择要从中导出数据的数据库。
  6. 目标位置部分,选择浏览以搜索用于导出的 Cloud Storage 存储桶或文件夹。
  7. 点击导出开始导出。

gcloud

  1. 创建 Cloud Storage 存储桶
  2. 找到要从中导出数据的 Cloud SQL 实例的服务账号。为此,您可以运行 gcloud sql instances describe 命令。在输出中查找 serviceAccountEmailAddress 字段。
    gcloud sql instances describe INSTANCE_NAME
      
  3. 使用 gcloud storage buckets add-iam-policy-binding 向服务账号授予 storage.objectAdmin IAM 角色。如需详细了解如何设置 IAM 权限,请参阅 使用 IAM 权限
  4. 导出数据库:
    gcloud sql export bak INSTANCE_NAME gs://BUCKET_NAME/FILENAME \
    --database=DATABASE_NAME
      

    如需了解如何使用 gcloud sql export bak 命令,请参阅命令参考页面

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

REST v1

  1. 为导出操作创建 Cloud Storage 存储桶
    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME

    此步骤并非必需,但强烈建议执行此步骤,确保您不会访问任何其他数据。

  2. 为您的实例提供存储桶的 legacyBucketWriter IAM 角色。如需详细了解如何设置 IAM 权限,请参阅使用 IAM 权限
  3. 导出数据库:

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

    • PROJECT_ID:项目 ID
    • INSTANCE_ID:实例 ID
    • BUCKET_NAME:Cloud Storage 存储桶名称
    • PATH_TO_DUMP_FILE:SQL 转储文件的路径
    • DATABASE_NAME_1:Cloud SQL 实例中数据库的名称
    • DATABASE_NAME_2:Cloud SQL 实例中数据库的名称

    HTTP 方法和网址:

    POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/export

    请求 JSON 正文:

    
    

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

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

  4. 如果您不需要保留之前设置的 IAM 角色,请立即移除该角色。
如需查看此请求的完整参数列表,请参阅 instances:export 页面。

REST v1beta4

  1. 为导出操作创建 Cloud Storage 存储桶
    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
    

    此步骤并非必需,但强烈建议执行此步骤,确保您不会访问任何其他数据。

  2. 为您的实例提供存储桶的 storage.objectAdmin IAM 角色。如需详细了解如何设置 IAM 权限,请参阅使用 IAM 权限
  3. 导出数据库:

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

    • PROJECT_ID:项目 ID
    • INSTANCE_ID:实例 ID
    • BUCKET_NAME:Cloud Storage 存储桶名称
    • PATH_TO_DUMP_FILE:SQL 转储文件的路径
    • DATABASE_NAME_1:Cloud SQL 实例中数据库的名称
    • DATABASE_NAME_2:Cloud SQL 实例中数据库的名称

    HTTP 方法和网址:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/export

    请求 JSON 正文:

    
    

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

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

  4. 如果您不需要保留之前设置的 IAM 角色,请立即撤消该角色。
如需查看该请求的完整参数列表,请参阅 instances:export 页面。

导出差分数据库备份

在导出差分数据库备份之前,必须导出差分库。

如果其他服务或功能(例如时间点恢复和读取副本)在您导出完整备份和差分备份之间触发了完整备份,那么您必须再次触发完整备份导出。

为了更好地理解这一点,请参考以下示例:

  1. 您在上午 7:00 发出完整备份请求。
  2. 您在上午 9:00 启用时间点恢复。这会触发实例的完整备份。
  3. 您尝试在下午 5:00 进行差分备份。由于上次完整备份是由某个时间点恢复触发的,因此此导出请求会失败并显示错误消息。

Cloud SQL 不支持副本实例的 --differential-base--bak-type=DIFF 数据库导出请求。

gcloud

  1. 创建 Cloud Storage 存储桶。
  2. 找到要从中导出数据的 Cloud SQL 实例的服务账号。 为此,您可以运行 gcloud sql instances describe 命令。在输出中查找 serviceAccountEmailAddress 字段。
    gcloud sql instances describe INSTANCE_NAME
      
  3. 使用 gcloud storage buckets add-iam-policy-binding 向服务账号授予 storage.objectAdmin IAM 角色。如需详细了解如何设置 IAM 权限,请参阅 使用 IAM 权限
  4. 将数据库导出为差分库。

    gcloud sql export bak INSTANCE_NAME gs://BUCKET_NAME/DIFFERENTIAL_BASE_FILENAME \
    --database=DATABASE_NAME --differential-base

    如需了解如何使用 gcloud sql export bak 命令,请参阅命令参考页面

  5. 导出差分备份。

    gcloud sql export bak INSTANCE_NAME gs://BUCKET_NAME/DIFFERENTIAL_BACKUP_FILENAME \
    --database=DATABASE_NAME --bak-type=DIFF
      

    如需了解如何使用 gcloud sql export bak 命令,请参阅命令参考页面

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

REST v1

  1. 为导出操作创建 Cloud Storage 存储桶
    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME

    此步骤并非必需,但强烈建议执行此步骤,确保您不会访问任何其他数据。

  2. 为您的实例提供存储桶的 legacyBucketWriter IAM 角色。如需详细了解如何设置 IAM 权限,请参阅使用 IAM 权限
  3. 将完整数据库备份作为差分库导出。

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

    • PROJECT_ID:项目 ID
    • INSTANCE_ID:实例 ID
    • BUCKET_NAME:Cloud Storage 存储桶名称
    • PATH_TO_BAK_FILE:SQL BAK 文件的路径
    • DATABASE_NAME:Cloud SQL 实例中数据库的名称
    • offload:若要启用和使用无服务器导出功能,请将此值设置为 TRUE

    HTTP 方法和网址:

    POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/export

    请求 JSON 正文:

    {
     "exportContext":
       {
          "fileType": "BAK",
          "uri": "gs://BUCKET_NAME/PATH_TO_BAK_FILE",
          "databases": ["DATABASE_NAME"]
          "offload": TRUE | FALSE
          "bakExportOptions": {
            "differentialBase":true
          }
       }
    }
    

    如需发送请求,请选择以下方式之一:

    curl

    将请求正文保存在名为 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://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/export"

    PowerShell

    将请求正文保存在名为 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://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/export" | Select-Object -Expand Content

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

  4. 导出差分备份。

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

    • project-id:项目 ID
    • instance-id:实例 ID
    • bucket_name:Cloud Storage 存储桶名称
    • path_to_dump_file:SQL 转储文件的路径
    • database_name_1:Cloud SQL 实例中数据库的名称
    • database_name_2:Cloud SQL 实例中数据库的名称
    • offload:启用无服务器导出功能。设置为 true 可使用无服务器导出功能。

    HTTP 方法和网址:

    POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/export

    请求 JSON 正文:

    {
     "exportContext":
       {
          "fileType": "BAK",
          "uri": "gs://bucket_name/path_to_dump_file",
          "databases": ["database_name"]
          "offload": true | false
          "bakExportOptions": {
            bakType:"DIFF"
          }
    
        }
    }
    

    如需发送请求,请选择以下方式之一:

    curl

    将请求正文保存在名为 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://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/export"

    PowerShell

    将请求正文保存在名为 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://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/export" | Select-Object -Expand Content

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

  5. 如果您不需要保留之前设置的 IAM 角色,请立即移除该角色。
如需查看此请求的完整参数列表,请参阅 instances:export 页面。

REST v1beta4

  1. 为导出操作创建 Cloud Storage 存储桶
    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
    

    此步骤并非必需,但强烈建议执行此步骤,确保您不会访问任何其他数据。

  2. 为您的实例提供存储桶的 storage.objectAdmin IAM 角色。如需详细了解如何设置 IAM 权限,请参阅使用 IAM 权限
  3. 将完整数据库备份作为差分库导出。

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

    • project-id:项目 ID
    • instance-id:实例 ID
    • bucket_name:Cloud Storage 存储桶名称
    • path_to_dump_file:SQL 转储文件的路径
    • database_name_1:Cloud SQL 实例中数据库的名称
    • database_name_2:Cloud SQL 实例中数据库的名称
    • offload:若要启用和使用无服务器导出功能,请将其值设置为 true

    HTTP 方法和网址:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/export

    请求 JSON 正文:

    {
      "exportContext":
        {
           "fileType": "BAK",
           "uri": "gs://bucket_name/path_to_dump_file",
           "databases": ["database_name"]
           "offload": true | false
           "bakExportOptions": {
             "differentialBase":true
           }
    
         }
    }
    

    如需发送请求,请选择以下方式之一:

    curl

    将请求正文保存在名为 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://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/export"

    PowerShell

    将请求正文保存在名为 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://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/export" | Select-Object -Expand Content

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

  4. 导出差分备份:

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

    • project-id:项目 ID
    • instance-id:实例 ID
    • bucket_name:Cloud Storage 存储桶名称
    • path_to_dump_file:SQL 转储文件的路径
    • database_name_1:Cloud SQL 实例中数据库的名称
    • database_name_2:Cloud SQL 实例中数据库的名称
    • offload:若要启用和使用无服务器导出功能,请将此值设置为 true

    HTTP 方法和网址:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/export

    请求 JSON 正文:

    {
      "exportContext":
        {
           "fileType": "BAK",
           "uri": "gs://bucket_name/path_to_dump_file",
           "databases": ["database_name"]
           "offload": true | false
           "bakExportOptions": {
            bakType:"DIFF"
           }
    
         }
    }
    

    如需发送请求,请选择以下方式之一:

    curl

    将请求正文保存在名为 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://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/export"

    PowerShell

    将请求正文保存在名为 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://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/export" | Select-Object -Expand Content

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

  5. 如果您不需要保留之前设置的 IAM 角色,请立即撤消该角色。
如需查看该请求的完整参数列表,请参阅 instances:export 页面。

导出事务日志

您可以为启用了时间点恢复 (PITR) 且其日志存储在 Cloud Storage 中的 Cloud SQL 企业 Plus 版实例导出事务日志。

gcloud

  1. 为导出操作创建 Cloud Storage 存储桶
    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME

    此步骤并非必需,但强烈建议执行此步骤,确保您不会访问任何其他数据。

  2. 找到要从中导出数据的 Cloud SQL 实例的服务账号。 为此,您可以运行 gcloud sql instances describe 命令。在输出中查找 serviceAccountEmailAddress 字段。
    gcloud sql instances describe INSTANCE_NAME
      
  3. 使用 gcloud storage buckets add-iam-policy-binding 向服务账号授予 storage.Admin IAM 角色。如需详细了解如何设置 IAM 权限,请参阅 设置和管理存储分区的 IAM 政策
  4. 导出事务日志。

    gcloud sql export bak INSTANCE_NAME gs://BUCKET_NAME/FOLDER_PATH
    --export-log-start-time=START_DATE_AND_TIME /
    --export-log-end-time=END_DATE_AND_TIME /
    --database=DATABASE_NAME --bak-type=TLOG
      

    如需了解如何使用 gcloud sql export bak 命令,请参阅命令参考页面

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

REST

  1. 创建 Cloud Storage 存储桶。

    此步骤并非必需,但强烈建议执行此步骤,确保您不会访问任何其他数据。

  2. 为您的实例提供存储桶的 storage.Admin IAM 角色。如需详细了解如何设置 IAM 权限,请参阅设置和管理存储分区的 IAM 政策
  3. 导出事务日志。

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

    • PROJECT_ID:项目 ID。
    • INSTANCE_ID:实例 ID。
    • BUCKET_NAME:Cloud Storage 存储桶名称。
    • FOLDER_PATH:Cloud Storage 存储桶中文件夹的路径。Cloud SQL 会将事务日志导出到此文件夹。
    • DATABASE_NAME:Cloud SQL 实例中数据库的名称。
    • exportLogStartTime:要导出的事务日志的开始日期和时间。
    • exportLogEndTime:要导出的事务日志的结束日期和时间。

    HTTP 方法和网址:

    POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/export

    请求 JSON 正文:

    {
     "exportContext":
       {
          "fileType": "BAK",
          "uri": "gs://BUCKET_NAME/FOLDER_PATH",
          "databases": ["DATABASE_NAME"]
          "bakExportOptions": {
            bakType:"TLOG"
            exportLogStartTime: START_DATE_AND_TIME
            exportLogEndTime: END_DATE_AND_TIME
          }
       }
    }
    

    如需发送请求,请选择以下方式之一:

    curl

    将请求正文保存在名为 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://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/export"

    PowerShell

    将请求正文保存在名为 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://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/export" | Select-Object -Expand Content

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

  4. 如果您不需要保留之前设置的 IAM 角色,请立即移除该角色。
如需查看请求的完整参数列表,请参阅 instances.export 页面。

使用条带式导出

条带导出的优势如下:

  • 减少完成操作所需的时间
  • 可以导出大于 5 TB 的数据库

使用条带式导出的潜在缺点是,备份拆分为一组文件,而不是由一个文件组成。这组文件称为“条带集”;请参阅条带介质集(条带集)中的备份设备。在 Cloud SQL 中,您会导出到 Cloud Storage 中的空文件夹,而不是生成单个文件。如需了解详情,请参阅如何使用条带式导出

规划操作

条带式导出可以提高导出的性能。但是,如果您的使用场景需要单个输出文件,或者数据库的小于 5 TB,并且不太需要更强的性能,则您可以使用非条带式导出。

如果您决定使用条带式导出,请考虑条带数量。您可以在 gcloud CLI 命令或 REST API 调用中指定此值。但是,如果您需要最佳条带数量以保证性能,或者不知道应该使用什么数量,请省略数量。系统会自动设置最佳条带数量。

Cloud SQL for SQL Server 目前支持的条带数量上限为 64。

如何使用条带式导出

gcloud

  1. 创建 Cloud Storage 存储桶。
  2. 找到要从中导出数据的 Cloud SQL 实例的服务账号。为此,您可以运行 gcloud sql instances describe 命令。在输出中查找 serviceAccountEmailAddress 字段。
    gcloud sql instances describe INSTANCE_NAME
      
  3. 使用 gcloud storage buckets add-iam-policy-binding 向服务账号授予 storage.objectAdmin IAM 角色。如需详细了解如何设置 IAM 权限,请参阅 使用 IAM 权限
  4. 如需导出数据库,请指定 --striped 参数和/或为 --stripe_count 指定值。 设置 --stripe_count 的值表示想要使用 --striped 参数。如果您指定 --no-striped,但为 --stripe_count 指定了值,则会发生错误:
    gcloud beta sql export bak INSTANCE_NAME \
    gs://BUCKET_NAME/STRIPED_EXPORT_FOLDER \
    --database=DATABASE_NAME --striped --stripe_count=NUMBER
      

    如需了解如何使用 gcloud beta sql export bak 命令,请参阅命令参考页面

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

REST v1

  1. 为导出操作创建 Cloud Storage 存储桶
    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME

    此步骤并非必需,但强烈建议执行此步骤,确保您不会访问任何其他数据。

  2. 为您的实例提供存储桶的 legacyBucketWriter IAM 角色。如需详细了解如何设置 IAM 权限,请参阅使用 IAM 权限
  3. 导出数据库:

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

    • project-id:项目 ID
    • instance-id:实例 ID
    • bucket_name:Cloud Storage 存储桶名称
    • path_to_folder:要将条带集导出到的文件夹的路径(在 Cloud Storage 存储桶中)
    • database_name:Cloud SQL 实例中数据库的名称
    • true | false:设置为 true 可使用条带式导出。如果您指定 true 而不指定条带数量,系统会自动设置最佳条带数量。
    • number_of_stripes:要使用的条带数量。如果已指定,则 striped 隐式设置为 true

    HTTP 方法和网址:

    POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/export

    请求 JSON 正文:

    {
     "exportContext":
       {
          "fileType": "BAK",
          "uri": "gs://bucket_name/path_to_folder",
          "databases": ["database_name"],
          "bakExportOptions": {
            "striped": true | false,
            "stripe_count": ["number_of_stripes"]
          }
        }
    }
    

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

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

  4. 如果您不需要保留之前设置的 IAM 角色,请立即移除该角色。
如需查看此请求的完整参数列表,请参阅 instances:export 页面。

REST v1beta4

  1. 为导出操作创建 Cloud Storage 存储桶
    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
    

    此步骤并非必需,但强烈建议执行此步骤,确保您不会访问任何其他数据。

  2. 为您的实例提供存储桶的 legacyBucketWriter IAM 角色。如需详细了解如何设置 IAM 权限,请参阅使用 IAM 权限
  3. 导出数据库:

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

    • project-id:项目 ID
    • instance-id:实例 ID
    • bucket_name:Cloud Storage 存储桶名称
    • path_to_folder:要向其中导出条带集的文件夹的路径(在 Cloud Storage 存储桶中)
    • database_name:Cloud SQL 实例中数据库的名称
    • true | false:设置为 true 可使用条带式导出。如果您指定 true 而不指定条带数量,系统会自动设置最佳条带数量。
    • number_of_stripes:要使用的条带数量。如果已指定,则 striped 隐式设置为 true

    HTTP 方法和网址:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/export

    请求 JSON 正文:

    {
     "exportContext":
       {
          "fileType": "BAK",
          "uri": "gs://bucket_name/path_to_folder",
          "databases": ["database_name"],
          "bakExportOptions": {
            "striped": true | false,
            "stripe_count": ["number_of_stripes"]
          }
        }
    }
    

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

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

  4. 如果您不需要保留之前设置的 IAM 角色,请立即移除该角色。
如需查看该请求的完整参数列表,请参阅 instances:export 页面。

导入到 Cloud SQL for SQL Server

导入 Cloud SQL for SQL Server 所需的角色和权限

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

此外,Cloud SQL 实例的服务账号必须拥有以下角色之一:

  • storage.objectAdmin IAM 角色
  • 包括以下权限的自定义角色:
    • storage.objects.get
    • storage.objects.list(仅适用于条带式导入)

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

将数据从 BAK 文件导入 Cloud SQL for SQL Server

如需使用条带式导入,请参阅使用条带式导入

您可以使用各种导入框架。例如,Cloud SQL for SQL Server 对以下数据库版本支持变更数据捕获 (CDC)

  • SQL Server 2017 Standard
  • SQL Server 2017 Enterprise
  • SQL Server 2019 Standard
  • SQL Server 2019 Enterprise

导入启用 CDC 的数据库时,系统会保留 KEEP_CDC 标志。

如果您的实例版本是 Microsoft SQL Server Enterprise Edition,则可以导入加密的 BAK 文件。

Microsoft SQL Server Standard Edition 实例也可以导入加密的 BAK 文件,但只能通过 gcloud CLI 导入。

唯一支持的 BAK 扩展程序是 .bak.bak.gz。目前不支持 GPG 加密备份。

对于以下说明,请准备指定一个新数据库;不要等到开始导入 BAK 文件的时候才创建数据库。

如需使用 BAK 文件将数据导入 Cloud SQL 实例,请执行以下操作:

控制台

  1. 在 Google Cloud 控制台中,转到 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 如需打开实例的概览页面,请点击实例名称。
  3. 点击导入
  4. 选择要从中导入数据的文件字段中,输入要用于导入的存储桶和 BAK 文件的路径。

    您可以导入经过压缩 (.gz) 或未经压缩的文件。

  5. 文件格式部分,选择 BAK

  6. 目标部分,指定要将 BAK 文件导入 Cloud SQL 实例中的哪个数据库。
  7. 点击导入以开始导入。

gcloud

  1. 为导入操作创建 Cloud Storage 存储桶

    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME

    此步骤并非必需,但强烈建议执行此步骤,确保您不会访问任何其他数据。

  2. 确保您已配置所需的角色和权限。
  3. 将数据从 BAK 文件上传到存储桶。
  4. 描述要向其中导入数据的实例:
    gcloud sql instances describe INSTANCE_NAME
  5. 复制 serviceAccountEmailAddress 字段。
  6. 使用 gcloud storage buckets add-iam-policy-binding 向服务账号授予该存储桶的 storage.objectViewer IAM 角色。如需详细了解如何设置 IAM 权限,请参阅使用 IAM 权限
  7. 从文件导入数据:
    gcloud sql import bak INSTANCE_NAME gs://BUCKET_NAME/FILE_NAME \
    --database=DATABASE_NAME
    对于加密导入,请使用以下命令:
    gcloud sql import bak INSTANCE_NAME gs://BUCKET_NAME/FILE_NAME
    --database=DATABASE_NAME --cert-path=gs://BUCKET_NAME/CERTIFICATE_NAME
     --pvk-path=gs://BUCKET_NAME/KEY_NAME --prompt-for-pvk-password
  8. 如果您不需要保留之前设置的 IAM 权限,请使用 gcloud storage buckets remove-iam-policy-binding 移除这些权限。

REST v1

  1. 创建 Cloud Storage 存储桶。
  2. 将文件上传到存储桶。

    如需有关将文件上传到存储桶方面的帮助,请参阅上传对象

  3. 为您的实例提供存储桶的 storage.objectAdmin IAM 角色。如需详细了解如何设置 IAM 权限,请参阅使用 IAM 权限
  4. 从文件导入数据:

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

    • project-id:项目 ID
    • instance-id:实例 ID
    • bucket_name:Cloud Storage 存储桶名称
    • path_to_bak_file:BAK 文件的路径
    • database_name:Cloud SQL 实例中数据库的名称

    HTTP 方法和网址:

    POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/import

    请求 JSON 正文:

    {
     "importContext":
       {
          "fileType": "BAK",
          "uri": "gs://bucket_name/path_to_bak_file",
          "database": "database_name"
        }
    }
    
    

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

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

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

    如需查看该请求的完整参数列表,请参阅 instances:import 页面。
  5. 如果您不需要保留之前设置的 IAM 权限,请移除这些权限。

REST v1beta4

  1. 创建 Cloud Storage 存储桶。
  2. 将文件上传到存储桶。

    如需有关将文件上传到存储桶方面的帮助,请参阅上传对象

  3. 为您的实例提供存储桶的 storage.objectAdmin IAM 角色。如需详细了解如何设置 IAM 权限,请参阅 使用 IAM 权限
  4. 从文件导入数据:

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

    • project-id:项目 ID
    • instance-id:实例 ID
    • bucket_name:Cloud Storage 存储桶名称
    • path_to_bak_file:BAK 文件的路径
    • database_name:Cloud SQL 实例中数据库的名称

    HTTP 方法和网址:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/import

    请求 JSON 正文:

    {
     "importContext":
       {
          "fileType": "BAK",
          "uri": "gs://bucket_name/path_to_bak_file",
          "database": "database_name"
        }
    }
    
    

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

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

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

    如需查看该请求的完整参数列表,请参阅 instances:import 页面。
  5. 如果您不需要保留之前设置的 IAM 权限,请移除这些权限。

如果您收到 ERROR_RDBMS 等错误,请确保该存储桶中存在 BAK 文件,并且您具有该存储桶的正确权限。如需有关在 Cloud Storage 中配置访问权限控制方面的帮助,请参阅创建和管理访问控制列表

导入差分数据库备份

在导入差分数据库备份之前,您需要导入完整备份,并且在完整备份导入后,数据库必须处于 RESTORING 状态。

Cloud SQL 不支持在启用了时间点恢复的实例中导入差分数据库备份。这是因为,使用 --no-recovery 导入数据库备份是导入差分数据库备份的前提条件。此外,如果数据库处于 RESTORING 状态,您将无法在实例上启用时间点恢复。如果导入失败,请执行以下操作之一以启用时间点恢复:

  • 使用 --recovery-only 标志将处于 RESTORING 状态的数据库置于在线状态。

  • 移除数据库。

若要使用差分数据库备份将数据导入 Cloud SQL 实例,请执行以下步骤:

gcloud

  1. 为导入操作创建 Cloud Storage 存储桶

    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME

    此步骤并非必需,但我们强烈建议您执行此步骤,以免您访问任何其他数据。

  2. 确保您已配置所需的角色和权限。
  3. 将数据从 BAK 文件上传到存储桶。
  4. 描述要向其中导入数据的实例:
    gcloud sql instances describe INSTANCE_NAME
  5. 复制 serviceAccountEmailAddress 字段。
  6. 使用 gcloud storage buckets add-iam-policy-binding 向服务账号授予该存储桶的 storage.objectViewer IAM 角色。如需详细了解如何设置 IAM 权限,请参阅使用 IAM 权限
  7. 使用 --no-recovery 导入完整备份。

    gcloud sql import bak INSTANCE_NAME gs://BUCKET_NAME/DIFFERENTIAL_BASE_FILENAME \
    --database=DATABASE_NAME --bak-type=FULL --no-recovery
  8. 导入差分数据库备份。

    gcloud sql import bak INSTANCE_NAME gs://BUCKET_NAME/DIFFERENTIAL_BACKUP_FILENAME \
    --database=DATABASE_NAME --bak-type=DIFF --no-recovery
  9. 使用 --recovery-only 标志将导入的数据库处于在线状态。此步骤是可选的,只有当您的数据库处于 RESTORING 状态时,您才需要执行此步骤。

    gcloud sql import bak INSTANCE_NAME \
    --database=DATABASE_NAME --recovery-only
  10. 如果您不需要保留之前设置的 IAM 权限,请使用 gcloud storage buckets remove-iam-policy-binding 移除这些权限。

REST v1

  1. 创建 Cloud Storage 存储桶。
  2. 将文件上传到存储桶。

    如需有关将文件上传到存储桶方面的帮助,请参阅上传对象

  3. 为您的实例提供存储桶的 storage.objectAdmin IAM 角色。如需详细了解如何设置 IAM 权限,请参阅使用 IAM 权限
  4. 使用 noRecovery 导入完整备份。

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

    • PROJECT_ID:项目 ID。
    • INSTANCE_ID:实例 ID。
    • BUCKET_NAME:Cloud Storage 存储桶名称。
    • PATH_TO_BAK_FILE:BAK 文件的路径。
    • DATABASE_NAME:Cloud SQL 实例中数据库的名称。

    HTTP 方法和网址:

    POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import

    请求 JSON 正文:

    {
     "importContext":
       {
          "fileType": "BAK",
          "uri": "gs://BUCKET_NAME/PATH_TO_BAK_FILE",
          "database": "DATABASE_NAME"
          "bakImportOptions": {
            "noRecovery": true,
            "bakType": "FULL",
          }
    
        }
    }
    
    

    如需发送请求,请选择以下方式之一:

    curl

    将请求正文保存在名为 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://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import"

    PowerShell

    将请求正文保存在名为 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://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import" | Select-Object -Expand Content

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

  5. 导入差分数据库备份。

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

    • project-id:项目 ID
    • instance-id:实例 ID
    • bucket_name:Cloud Storage 存储桶名称
    • path_to_bak_file:BAK 文件的路径
    • database_name:Cloud SQL 实例中数据库的名称

    HTTP 方法和网址:

    POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/import

    请求 JSON 正文:

    {
     "importContext":
       {
          "fileType": "BAK",
          "uri": "gs://bucket_name/path_to_bak_file",
          "database": "database_name"
          "bakImportOptions": {
            "bakType": "DIFF",
            "noRecovery": true,
          }
    
        }
    }
    
    

    如需发送请求,请选择以下方式之一:

    curl

    将请求正文保存在名为 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://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/import"

    PowerShell

    将请求正文保存在名为 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://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/import" | Select-Object -Expand Content

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

  6. 使用 recoveryOnly 让导入的数据库处于在线状态。此步骤是可选的,只有当您的数据库处于 RESTORING 状态时,您才需要执行此步骤。

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

    • PROJECT_ID:项目 ID
    • INSTANCE_ID:实例 ID
    • BUCKET_NAME:Cloud Storage 存储桶名称
    • PATH_TO_BAK_FILE:BAK 文件的路径
    • DATABASE_NAME:Cloud SQL 实例中数据库的名称

    HTTP 方法和网址:

    POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import

    请求 JSON 正文:

    {
     "importContext":
       {
          "fileType": "BAK",
          "uri": "gs://BUCKET_NAME/PATH_TO_BAK_FILE",
          "database": "DATABASE_NAME"
          "bakImportOptions": {
            "recoveryOnly": true,
          }
    
        }
    }
    
    

    如需发送请求,请选择以下方式之一:

    curl

    将请求正文保存在名为 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://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import"

    PowerShell

    将请求正文保存在名为 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://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import" | Select-Object -Expand Content

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

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

REST v1beta4

  1. 创建 Cloud Storage 存储桶。
  2. 将文件上传到存储桶。

    如需有关将文件上传到存储桶方面的帮助,请参阅上传对象

  3. 为您的实例提供存储桶的 storage.objectAdmin IAM 角色。如需详细了解如何设置 IAM 权限,请参阅 使用 IAM 权限
  4. 使用 noRecovery 导入完整备份。

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

    • PROJECT-ID:项目 ID。
    • INSTANCE_ID:实例 ID。
    • BUCKET_NAME:Cloud Storage 存储桶名称。
    • PATH_TO_BAK_FILE:BAK 文件的路径。
    • DATABASE_NAME:Cloud SQL 实例中数据库的名称。

    HTTP 方法和网址:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances/INSTANCE_ID/import

    请求 JSON 正文:

    {
     "importContext":
       {
          "fileType": "BAK",
          "uri": "gs://BUCKET_NAME/PATH_TO_BAK_FILE",
          "database": "DATABASE_NAME"
          "bakImportOptions": {
            "noRecovery": true,
            "bakType": "FULL",
          }
        }
    }
    
    

    如需发送请求,请选择以下方式之一:

    curl

    将请求正文保存在名为 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://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances/INSTANCE_ID/import"

    PowerShell

    将请求正文保存在名为 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://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances/INSTANCE_ID/import" | Select-Object -Expand Content

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

  5. 导入差分数据库备份。

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

    • project-id:项目 ID
    • instance-id:实例 ID
    • bucket_name:Cloud Storage 存储桶名称
    • path_to_bak_file:BAK 文件的路径
    • database_name:Cloud SQL 实例中数据库的名称

    HTTP 方法和网址:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/import

    请求 JSON 正文:

    {
     "importContext":
       {
          "fileType": "BAK",
          "uri": "gs://bucket_name/path_to_bak_file",
          "database": "database_name"
          "bakImportOptions": {
            "bakType": "DIFF",
            "noRecovery": true,
          }
        }
    }
    
    

    如需发送请求,请选择以下方式之一:

    curl

    将请求正文保存在名为 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://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/import"

    PowerShell

    将请求正文保存在名为 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://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/import" | Select-Object -Expand Content

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

  6. 使用 recoveryOnly 让导入的数据库处于在线状态。此步骤是可选的,只有当您的数据库处于 RESTORING 状态时,您才需要执行此步骤。

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

    • PROJECT_ID:项目 ID
    • INSTANCE_ID:实例 ID
    • BUCKET_NAME:Cloud Storage 存储桶名称
    • PATH_TO_BAK_FILE:BAK 文件的路径
    • DATABASE_NAME:Cloud SQL 实例中数据库的名称

    HTTP 方法和网址:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/import

    请求 JSON 正文:

    {
     "importContext":
       {
          "fileType": "BAK",
          "uri": "gs://BUCKET_NAME/PATH_TO_BAK_FILE",
          "database": "DATABASE_NAME"
          "bakImportOptions": {
            "recoveryOnly": true,
          }
        }
    }
    
    

    如需发送请求,请选择以下方式之一:

    curl

    将请求正文保存在名为 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://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/import"

    PowerShell

    将请求正文保存在名为 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://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/import" | Select-Object -Expand Content

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

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

如果您收到 ERROR_RDBMS 等错误,请确保该存储桶中存在 BAK 文件,并且您具有该存储桶的正确权限。如需有关在 Cloud Storage 中配置访问权限控制方面的帮助,请参阅创建和管理访问控制列表

导入事务日志备份

事务日志是数据库事务以及每个事务所做的修改的记录。在系统发生故障时,您可以使用它来重新建立数据库一致性。

如需使用事务日志备份将数据导入 Cloud SQL 实例,请执行以下步骤:

gcloud

  1. 可选:为导入操作创建 Cloud Storage 存储桶

    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
  2. 将备份文件上传到存储桶。
  3. 描述要向其中导入数据的实例:
    gcloud sql instances describe INSTANCE_NAME
  4. 复制 serviceAccountEmailAddress 字段。
  5. 使用 gcloud storage buckets add-iam-policy-binding 向服务账号授予该存储桶的 storage.objectViewer IAM 角色。如需详细了解如何设置 IAM 权限,请参阅使用 IAM 权限
  6. 使用 --no-recovery 参数导入完整备份。确保在完整备份导入后,数据库处于 RESTORING 状态。

    gcloud sql import bak INSTANCE_NAME gs://BUCKET_NAME/BACKUP_FILENAME \
    --database=DATABASE_NAME --bak-type=FULL --no-recovery
  7. 可选:导入差分备份
  8. 导入事务日志备份。

    gcloud sql import bak INSTANCE_NAME gs://BUCKET_NAME/BACKUP_FILENAME \
    --database=DATABASE_NAME --bak-type=TLOG
    --stop-at=STOP_AT_TIMESTAMP --stop-at-mark=STOP_AT_MARK_NAME
    --no-recovery
    替换以下内容:
    • INSTANCE_NAME:实例名称。
    • BUCKET_NAME:Cloud Storage 存储桶名称。
    • BACKUP_FILENAME:备份文件的名称。
    • DATABASE_NAME:Cloud SQL 实例中数据库的名称。
    • STOP_AT_TIMESTAMP:必须停止事务日志导入的时间戳。这是一个可选字段,其值必须使用 RFC 3339 格式
    • STOP_AT_MARK_NAME 标记的事务,事务日志导入必须在该事务结束时停止。这是可选字段,可以将任何字符串用作其值。如果该值采用 lsn:log-sequence-number 格式,则交易日志导入会在给定 日志序列号处停止。
    重复此步骤,直到导入所有事务日志备份。
  9. 可选:使用 --recovery-only 标志将导入的数据库处于在线状态。仅当数据库处于 RESTORING 状态时,才应执行此步骤。

    gcloud sql import bak INSTANCE_NAME \
    --database=DATABASE_NAME --recovery-only
  10. 如果您不需要保留之前设置的 IAM 权限,请使用 gcloud storage buckets remove-iam-policy-binding 移除这些权限。

REST v1

  1. 创建 Cloud Storage 存储桶。
  2. 将文件上传到存储桶。

    如需有关将文件上传到存储桶方面的帮助,请参阅上传对象

  3. 为您的实例提供存储桶的 storage.objectAdmin IAM 角色。如需详细了解如何设置 IAM 权限,请参阅使用 IAM 权限
  4. 如需查看该请求的完整参数列表,请参阅 instances:import 页面。
  5. 使用 noRecovery 导入完整备份。 确保在完整备份导入后,数据库处于 RESTORING 状态。

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

    • PROJECT_ID:项目 ID。
    • INSTANCE_ID:实例 ID。
    • BUCKET_NAME:Cloud Storage 存储桶名称。
    • PATH_TO_BAK_FILE:BAK 文件的路径。
    • DATABASE_NAME:Cloud SQL 实例中数据库的名称。

    HTTP 方法和网址:

    POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import

    请求 JSON 正文:

    {
     "importContext":
       {
          "fileType": "BAK",
          "uri": "gs://BUCKET_NAME/PATH_TO_BAK_FILE",
          "database": "DATABASE_NAME"
          "bakImportOptions": {
            "noRecovery": true,
            "bakType": "FULL",
          }
    
        }
    }
    
    

    如需发送请求,请选择以下方式之一:

    curl

    将请求正文保存在名为 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://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import"

    PowerShell

    将请求正文保存在名为 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://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import" | Select-Object -Expand Content

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

  6. 可选:导入差分备份
  7. 导入事务日志备份。

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

    • PROJECT_ID:项目 ID。
    • INSTANCE_ID:实例 ID。
    • BUCKET_NAME:Cloud Storage 存储桶名称。
    • PATH_TO_TLOG_FILE:事务日志文件的路径。
    • DATABASE_NAME:Cloud SQL 实例中数据库的名称。
    • STOP_AT_TIMESTAMP:必须停止事务日志导入的时间戳。这是一个可选字段,其值必须使用 RFC 3339 格式
    • STOP_AT_MARK_NAME 标记的事务,事务日志导入必须在该事务结束时停止。这是可选字段,可以将任何字符串用作其值。如果该值采用 lsn:log-sequence-number 格式,则交易日志导入会在给定 日志序列号处停止。

    HTTP 方法和网址:

    POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import

    请求 JSON 正文:

    {
     "importContext":
       {
          "fileType": "BAK",
          "uri": "gs://BUCKET_NAME/PATH_TO_TLOG_FILE",
          "database": "DATABASE_NAME"
          "bakImportOptions": {
            "bakType": "TLOG",
            "stopAt": STOP_AT_TIMESTAMP,
            "stopAtMark": STOP_AT_MARK_NAME,
            "noRecovery": true,
          }
    
        }
    }
    
    

    如需发送请求,请选择以下方式之一:

    curl

    将请求正文保存在名为 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://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import"

    PowerShell

    将请求正文保存在名为 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://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import" | Select-Object -Expand Content

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

    重复此步骤,直到导入所有事务日志备份。
  8. 可选:使用 recoveryOnly 让导入的数据库处于在线状态。仅当数据库处于 RESTORING 状态时,才应执行此步骤。

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

    • PROJECT_ID:项目 ID
    • INSTANCE_ID:实例 ID
    • BUCKET_NAME:Cloud Storage 存储桶名称
    • PATH_TO_BAK_FILE:BAK 文件的路径
    • DATABASE_NAME:Cloud SQL 实例中数据库的名称

    HTTP 方法和网址:

    POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import

    请求 JSON 正文:

    {
     "importContext":
       {
          "fileType": "BAK",
          "uri": "gs://BUCKET_NAME/PATH_TO_BAK_FILE",
          "database": "DATABASE_NAME"
          "bakImportOptions": {
            "recoveryOnly": true,
          }
    
        }
    }
    
    

    如需发送请求,请选择以下方式之一:

    curl

    将请求正文保存在名为 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://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import"

    PowerShell

    将请求正文保存在名为 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://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import" | Select-Object -Expand Content

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

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

REST v1beta4

  1. 创建 Cloud Storage 存储桶。
  2. 将文件上传到存储桶。

    如需有关将文件上传到存储桶方面的帮助,请参阅上传对象

  3. 为您的实例提供存储桶的 storage.objectAdmin IAM 角色。如需详细了解如何设置 IAM 权限,请参阅 使用 IAM 权限
  4. 使用 noRecovery 导入完整备份。 确保在完整备份导入后,数据库处于 RESTORING 状态。

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

    • PROJECT-ID:项目 ID。
    • INSTANCE_ID:实例 ID。
    • BUCKET_NAME:Cloud Storage 存储桶名称。
    • PATH_TO_BAK_FILE:BAK 文件的路径。
    • DATABASE_NAME:Cloud SQL 实例中数据库的名称。

    HTTP 方法和网址:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances/INSTANCE_ID/import

    请求 JSON 正文:

    {
     "importContext":
       {
          "fileType": "BAK",
          "uri": "gs://BUCKET_NAME/PATH_TO_BAK_FILE",
          "database": "DATABASE_NAME"
          "bakImportOptions": {
            "noRecovery": true,
            "bakType": "FULL",
          }
        }
    }
    
    

    如需发送请求,请选择以下方式之一:

    curl

    将请求正文保存在名为 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://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances/INSTANCE_ID/import"

    PowerShell

    将请求正文保存在名为 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://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances/INSTANCE_ID/import" | Select-Object -Expand Content

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

  5. 可选:导入差分备份
  6. 导入事务日志备份。其中,stopAtstopAtMark 是可选字段。

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

    • PROJECT_ID:项目 ID。
    • INSTANCE_ID:实例 ID。
    • BUCKET_NAME:Cloud Storage 存储桶名称。
    • PATH_TO_BAK_FILE:BAK 文件的路径。
    • DATABASE_NAME:Cloud SQL 实例中数据库的名称。
    • STOP_AT_TIMESTAMP:必须停止事务日志导入的时间戳。这是一个可选字段,其值必须使用 RFC 3339 格式
    • STOP_AT_MARK_NAME 标记的事务,事务日志导入必须在该事务结束时停止。这是可选字段,可以将任何字符串用作其值。如果该值采用 lsn:log-sequence-number 格式,则交易日志导入会在给定 日志序列号处停止。

    HTTP 方法和网址:

    POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import

    请求 JSON 正文:

    {
     "importContext":
       {
          "fileType": "BAK",
          "uri": "gs://BUCKET_NAME/PATH_TO_BAK_FILE",
          "database": "DATABASE_NAME"
          "bakImportOptions": {
            "bakType": "TLOG",
            "stopAt": STOP_AT_TIMESTAMP,
            "stopAtMark":STOP_AT_MARK_NAME,
            "noRecovery": true,
          }
    
        }
    }
    
    

    如需发送请求,请选择以下方式之一:

    curl

    将请求正文保存在名为 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://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import"

    PowerShell

    将请求正文保存在名为 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://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import" | Select-Object -Expand Content

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

    重复此步骤,直到导入所有事务日志备份。
  7. 可选:使用 recoveryOnly 让导入的数据库处于在线状态。仅当数据库处于 RESTORING 状态时,才应执行此步骤。

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

    • PROJECT_ID:项目 ID
    • INSTANCE_ID:实例 ID
    • BUCKET_NAME:Cloud Storage 存储桶名称
    • PATH_TO_BAK_FILE:BAK 文件的路径
    • DATABASE_NAME:Cloud SQL 实例中数据库的名称

    HTTP 方法和网址:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/import

    请求 JSON 正文:

    {
     "importContext":
       {
          "fileType": "BAK",
          "uri": "gs://BUCKET_NAME/PATH_TO_BAK_FILE",
          "database": "DATABASE_NAME"
          "bakImportOptions": {
            "recoveryOnly": true,
          }
        }
    }
    
    

    如需发送请求,请选择以下方式之一:

    curl

    将请求正文保存在名为 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://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/import"

    PowerShell

    将请求正文保存在名为 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://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/import" | Select-Object -Expand Content

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

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

使用条带式导入

条带导入的优势如下:

  • 减少完成操作所需的时间
  • 可以导入大于 5 TB 的数据库

使用条带导入的潜在缺点是,在执行导入之前,条带集中的所有文件(而不是单个文件)必须上传到 Cloud Storage 存储桶中的同一文件夹。

规划操作

在大多数使用场景中,条带式导入可以实现更好的性能,没有缺点。但是,如果您无法从给定实例备份到条带集,或者您的数据库小于 5 TB,并且更高的性能并不重要,则您可能需要使用非条带导入。

如何使用条带导入

gcloud

  1. 为导入操作创建 Cloud Storage 存储桶

    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME

    此步骤并非必需,但强烈建议执行此步骤,确保您不会访问任何其他数据。

  2. 确保您已配置所需的 IAM 角色和权限。
  3. 在存储桶中创建一个新文件夹。
  4. 如需导入数据库,请将(数据库的)条带集的文件上传到新文件夹中。确保所有文件都上传到该文件夹,并且该文件夹中不包含任何额外文件。
  5. 描述要从中导出数据的实例:
    gcloud sql instances describe INSTANCE_NAME
  6. 复制 serviceAccountEmailAddress 字段。
  7. 使用 gcloud storage buckets add-iam-policy-binding 向服务账号授予该存储桶的 storage.objectViewer IAM 角色。如需详细了解如何设置 IAM 权限,请参阅 使用 IAM 权限
  8. 从文件夹导入数据。与非条带导入的区别在于,URI 链接到条带集上传到的文件夹(而不是单个文件)的名称,并且您可以指定 --striped 参数:
    gcloud beta sql import bak INSTANCE_NAME gs://BUCKET_NAME/FOLDER_NAME \
    --database=DATABASE_NAME --striped
  9. 如果您不需要保留之前设置的 IAM 权限,请使用 gcloud storage buckets remove-iam-policy-binding 移除这些权限。

REST v1

  1. 创建 Cloud Storage 存储桶。
  2. 将文件上传到存储桶。

    如需有关将文件上传到存储桶方面的帮助,请参阅上传对象

  3. 为您的实例提供存储桶的 storage.objectAdmin IAM 角色。如需详细了解如何设置 IAM 权限,请参阅使用 IAM 权限
  4. 从文件导入数据:

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

    • project-id:项目 ID
    • instance-id:实例 ID
    • bucket_name:Cloud Storage 存储桶名称
    • path_to_folder:条带集所在的文件夹的路径(在 Cloud Storage 存储桶中)
    • database_name:要在 Cloud SQL 实例中创建的数据库的名称
    • true | false:设置为 true 可使用条带式导入

    HTTP 方法和网址:

    POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/import

    请求 JSON 正文:

    {
     "importContext":
       {
          "fileType": "BAK",
          "uri": "gs://bucket_name/path_to_folder",
          "database": "database_name",
          "bakImportOptions": {
            "striped": true | false
          }
        }
    }
    

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

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

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

    如需查看该请求的完整参数列表,请参阅 instances:import 页面。
  5. 如果您不需要保留之前设置的 IAM 权限,请移除这些权限。

REST v1beta4

  1. 创建 Cloud Storage 存储桶。
  2. 将文件上传到存储桶。

    如需有关将文件上传到存储桶方面的帮助,请参阅上传对象

  3. 为您的实例提供存储桶的 storage.objectAdmin IAM 角色。如需详细了解如何设置 IAM 权限,请参阅使用 IAM 权限
  4. 从文件导入数据:

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

    • project-id:项目 ID
    • instance-id:实例 ID
    • bucket_name:Cloud Storage 存储桶名称
    • path_to_folder:条带集所在的文件夹的路径(在 Cloud Storage 存储桶中)
    • database_name:要在 Cloud SQL 实例中创建的数据库的名称
    • true | false:设置为 true 可使用条带式导入

    HTTP 方法和网址:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/import

    请求 JSON 正文:

    {
     "importContext":
       {
          "fileType": "BAK",
          "uri": "gs://bucket_name/path_to_folder",
          "database": "database_name",
          "bakImportOptions": {
            "striped": true | false
          }
        }
    }
    

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

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

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

    如需查看该请求的完整参数列表,请参阅 instances:import 页面。
  5. 如果您不需要保留之前设置的 IAM 权限,请移除这些权限。

如果出现类似 ERROR_RDBMS 的错误,请确保表已存在。如果表已存在,请确认您对存储桶拥有正确的权限。如需有关在 Cloud Storage 中配置访问权限控制方面的帮助,请参阅创建和管理访问控制列表

后续步骤