本页介绍了如何使用 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 Editor 角色
- 包括以下权限的自定义角色:
cloudsql.instances.get
cloudsql.instances.export
此外,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 文件
控制台
-
在 Google Cloud 控制台中,转到 Cloud SQL 实例页面。
- 如需打开实例的概览页面,请点击实例名称。
- 点击导出。
- 在文件格式部分中,点击 BAK。
- 在要导出的数据部分,使用下拉菜单选择要从中导出数据的数据库。
- 在目标位置部分,选择浏览以搜索用于导出的 Cloud Storage 存储桶或文件夹。
- 点击导出开始导出。
gcloud
- 创建 Cloud Storage 存储桶
- 找到要从中导出数据的 Cloud SQL 实例的服务账号。为此,您可以运行
gcloud sql instances describe
命令。在输出中查找serviceAccountEmailAddress
字段。gcloud sql instances describe INSTANCE_NAME
- 使用
gcloud storage buckets add-iam-policy-binding
向服务账号授予storage.objectAdmin
IAM 角色。如需详细了解如何设置 IAM 权限,请参阅 使用 IAM 权限。 - 导出数据库:
gcloud sql export bak INSTANCE_NAME gs://BUCKET_NAME/FILENAME \ --database=DATABASE_NAME
如需了解如何使用
gcloud sql export bak
命令,请参阅命令参考页面。 - 如果您不需要保留之前设置的 IAM 角色,请立即撤消该角色。
REST v1
- 为导出操作创建 Cloud Storage 存储桶
gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
此步骤并非必需,但强烈建议执行此步骤,确保您不会访问任何其他数据。
- 为您的实例提供存储桶的
legacyBucketWriter
IAM 角色。如需详细了解如何设置 IAM 权限,请参阅使用 IAM 权限。 - 导出数据库:
在使用任何请求数据之前,请先进行以下替换:
- 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 响应:
- 如果您不需要保留之前设置的 IAM 角色,请立即移除该角色。
REST v1beta4
- 为导出操作创建 Cloud Storage 存储桶
gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
此步骤并非必需,但强烈建议执行此步骤,确保您不会访问任何其他数据。
- 为您的实例提供存储桶的
storage.objectAdmin
IAM 角色。如需详细了解如何设置 IAM 权限,请参阅使用 IAM 权限。 - 导出数据库:
在使用任何请求数据之前,请先进行以下替换:
- 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 响应:
- 如果您不需要保留之前设置的 IAM 角色,请立即撤消该角色。
导出差分数据库备份
在导出差分数据库备份之前,必须导出差分库。
如果其他服务或功能(例如时间点恢复和读取副本)在您导出完整备份和差分备份之间触发了完整备份,那么您必须再次触发完整备份导出。
为了更好地理解这一点,请参考以下示例:
- 您在上午 7:00 发出完整备份请求。
- 您在上午 9:00 启用时间点恢复。这会触发实例的完整备份。
- 您尝试在下午 5:00 进行差分备份。由于上次完整备份是由某个时间点恢复触发的,因此此导出请求会失败并显示错误消息。
Cloud SQL 不支持副本实例的 --differential-base
或 --bak-type=DIFF
数据库导出请求。
gcloud
- 创建 Cloud Storage 存储桶。
- 找到要从中导出数据的 Cloud SQL 实例的服务账号。
为此,您可以运行
gcloud sql instances describe
命令。在输出中查找serviceAccountEmailAddress
字段。gcloud sql instances describe INSTANCE_NAME
- 使用
gcloud storage buckets add-iam-policy-binding
向服务账号授予storage.objectAdmin
IAM 角色。如需详细了解如何设置 IAM 权限,请参阅 使用 IAM 权限。 将数据库导出为差分库。
gcloud sql export bak INSTANCE_NAME gs://BUCKET_NAME/DIFFERENTIAL_BASE_FILENAME \ --database=DATABASE_NAME --differential-base
如需了解如何使用
gcloud sql export bak
命令,请参阅命令参考页面。导出差分备份。
gcloud sql export bak INSTANCE_NAME gs://BUCKET_NAME/DIFFERENTIAL_BACKUP_FILENAME \ --database=DATABASE_NAME --bak-type=DIFF
如需了解如何使用
gcloud sql export bak
命令,请参阅命令参考页面。- 如果您不需要保留之前设置的 IAM 角色,请立即撤消该角色。
REST v1
- 为导出操作创建 Cloud Storage 存储桶
gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
此步骤并非必需,但强烈建议执行此步骤,确保您不会访问任何其他数据。
- 为您的实例提供存储桶的
legacyBucketWriter
IAM 角色。如需详细了解如何设置 IAM 权限,请参阅使用 IAM 权限。 - 将完整数据库备份作为差分库导出。
在使用任何请求数据之前,请先进行以下替换:
- 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 响应:
- 导出差分备份。
在使用任何请求数据之前,请先进行以下替换:
- 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 响应:
- 如果您不需要保留之前设置的 IAM 角色,请立即移除该角色。
REST v1beta4
- 为导出操作创建 Cloud Storage 存储桶
gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
此步骤并非必需,但强烈建议执行此步骤,确保您不会访问任何其他数据。
- 为您的实例提供存储桶的
storage.objectAdmin
IAM 角色。如需详细了解如何设置 IAM 权限,请参阅使用 IAM 权限。 - 将完整数据库备份作为差分库导出。
在使用任何请求数据之前,请先进行以下替换:
- 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 响应:
- 导出差分备份:
在使用任何请求数据之前,请先进行以下替换:
- 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 响应:
- 如果您不需要保留之前设置的 IAM 角色,请立即撤消该角色。
导出事务日志
您可以为启用了时间点恢复 (PITR) 且其日志存储在 Cloud Storage 中的 Cloud SQL 企业 Plus 版实例导出事务日志。
gcloud
- 为导出操作创建 Cloud Storage 存储桶
gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
此步骤并非必需,但强烈建议执行此步骤,确保您不会访问任何其他数据。
- 找到要从中导出数据的 Cloud SQL 实例的服务账号。
为此,您可以运行
gcloud sql instances describe
命令。在输出中查找serviceAccountEmailAddress
字段。gcloud sql instances describe INSTANCE_NAME
- 使用
gcloud storage buckets add-iam-policy-binding
向服务账号授予storage.Admin
IAM 角色。如需详细了解如何设置 IAM 权限,请参阅 设置和管理存储分区的 IAM 政策。 导出事务日志。
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
命令,请参阅命令参考页面。- 如果您不需要保留之前设置的 IAM 角色,请立即撤消该角色。
REST
-
此步骤并非必需,但强烈建议执行此步骤,确保您不会访问任何其他数据。
- 为您的实例提供存储桶的
storage.Admin
IAM 角色。如需详细了解如何设置 IAM 权限,请参阅设置和管理存储分区的 IAM 政策。 - 导出事务日志。
在使用任何请求数据之前,请先进行以下替换:
- 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 响应:
- 如果您不需要保留之前设置的 IAM 角色,请立即移除该角色。
使用条带式导出
条带导出的优势如下:
- 减少完成操作所需的时间
- 可以导出大于 5 TB 的数据库
使用条带式导出的潜在缺点是,备份拆分为一组文件,而不是由一个文件组成。这组文件称为“条带集”;请参阅条带介质集(条带集)中的备份设备。在 Cloud SQL 中,您会导出到 Cloud Storage 中的空文件夹,而不是生成单个文件。如需了解详情,请参阅如何使用条带式导出。
规划操作
条带式导出可以提高导出的性能。但是,如果您的使用场景需要单个输出文件,或者数据库的小于 5 TB,并且不太需要更强的性能,则您可以使用非条带式导出。
如果您决定使用条带式导出,请考虑条带数量。您可以在 gcloud CLI 命令或 REST API 调用中指定此值。但是,如果您需要最佳条带数量以保证性能,或者不知道应该使用什么数量,请省略数量。系统会自动设置最佳条带数量。
Cloud SQL for SQL Server 目前支持的条带数量上限为 64。
如何使用条带式导出
gcloud
- 创建 Cloud Storage 存储桶。
- 找到要从中导出数据的 Cloud SQL 实例的服务账号。为此,您可以运行
gcloud sql instances describe
命令。在输出中查找serviceAccountEmailAddress
字段。gcloud sql instances describe INSTANCE_NAME
- 使用
gcloud storage buckets add-iam-policy-binding
向服务账号授予storage.objectAdmin
IAM 角色。如需详细了解如何设置 IAM 权限,请参阅 使用 IAM 权限。 - 如需导出数据库,请指定
--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
命令,请参阅命令参考页面。 - 如果您不需要保留之前设置的 IAM 角色,请立即撤消该角色。
REST v1
- 为导出操作创建 Cloud Storage 存储桶
gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
此步骤并非必需,但强烈建议执行此步骤,确保您不会访问任何其他数据。
- 为您的实例提供存储桶的
legacyBucketWriter
IAM 角色。如需详细了解如何设置 IAM 权限,请参阅使用 IAM 权限。 - 导出数据库:
在使用任何请求数据之前,请先进行以下替换:
- 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 响应:
- 如果您不需要保留之前设置的 IAM 角色,请立即移除该角色。
REST v1beta4
- 为导出操作创建 Cloud Storage 存储桶
gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
此步骤并非必需,但强烈建议执行此步骤,确保您不会访问任何其他数据。
- 为您的实例提供存储桶的
legacyBucketWriter
IAM 角色。如需详细了解如何设置 IAM 权限,请参阅使用 IAM 权限。 - 导出数据库:
在使用任何请求数据之前,请先进行以下替换:
- 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 响应:
- 如果您不需要保留之前设置的 IAM 角色,请立即移除该角色。
导入到 Cloud SQL for SQL Server
导入 Cloud SQL for SQL Server 所需的角色和权限
如需将数据从 Cloud Storage 导入到 Cloud SQL 中,启动导入的用户必须拥有以下角色之一:
- Cloud SQL Admin 角色
- 包括以下权限的自定义角色:
cloudsql.instances.get
cloudsql.instances.import
此外,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 实例,请执行以下操作:
控制台
-
在 Google Cloud 控制台中,转到 Cloud SQL 实例页面。
- 如需打开实例的概览页面,请点击实例名称。
- 点击导入。
- 在选择要从中导入数据的文件字段中,输入要用于导入的存储桶和 BAK 文件的路径。
您可以导入经过压缩 (
.gz
) 或未经压缩的文件。 在文件格式部分,选择 BAK。
- 在目标部分,指定要将 BAK 文件导入 Cloud SQL 实例中的哪个数据库。
- 点击导入以开始导入。
gcloud
为导入操作创建 Cloud Storage 存储桶
gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
此步骤并非必需,但强烈建议执行此步骤,确保您不会访问任何其他数据。
- 确保您已配置所需的角色和权限。
- 将数据从 BAK 文件上传到存储桶。
- 描述要向其中导入数据的实例:
gcloud sql instances describe INSTANCE_NAME
- 复制
serviceAccountEmailAddress
字段。 - 使用
gcloud storage buckets add-iam-policy-binding
向服务账号授予该存储桶的storage.objectViewer
IAM 角色。如需详细了解如何设置 IAM 权限,请参阅使用 IAM 权限。 - 从文件导入数据:
对于加密导入,请使用以下命令: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
- 如果您不需要保留之前设置的 IAM 权限,请使用
gcloud storage buckets remove-iam-policy-binding
移除这些权限。
REST v1
- 创建 Cloud Storage 存储桶。
将文件上传到存储桶。
如需有关将文件上传到存储桶方面的帮助,请参阅上传对象。
- 为您的实例提供存储桶的
storage.objectAdmin
IAM 角色。如需详细了解如何设置 IAM 权限,请参阅使用 IAM 权限。 - 从文件导入数据:
在使用任何请求数据之前,请先进行以下替换:
- 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 响应:
如需使用其他用户身份执行导入操作,请指定
如需查看该请求的完整参数列表,请参阅 instances:import 页面。importContext.importUser
属性。 - 如果您不需要保留之前设置的 IAM 权限,请移除这些权限。
REST v1beta4
- 创建 Cloud Storage 存储桶。
将文件上传到存储桶。
如需有关将文件上传到存储桶方面的帮助,请参阅上传对象。
- 为您的实例提供存储桶的
storage.objectAdmin
IAM 角色。如需详细了解如何设置 IAM 权限,请参阅 使用 IAM 权限。 - 从文件导入数据:
在使用任何请求数据之前,请先进行以下替换:
- 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 响应:
如需使用其他用户身份执行导入操作,请指定
如需查看该请求的完整参数列表,请参阅 instances:import 页面。importContext.importUser
属性。 - 如果您不需要保留之前设置的 IAM 权限,请移除这些权限。
如果您收到 ERROR_RDBMS
等错误,请确保该存储桶中存在 BAK 文件,并且您具有该存储桶的正确权限。如需有关在 Cloud Storage 中配置访问权限控制方面的帮助,请参阅创建和管理访问控制列表。
导入差分数据库备份
在导入差分数据库备份之前,您需要导入完整备份,并且在完整备份导入后,数据库必须处于 RESTORING
状态。
Cloud SQL 不支持在启用了时间点恢复的实例中导入差分数据库备份。这是因为,使用 --no-recovery
导入数据库备份是导入差分数据库备份的前提条件。此外,如果数据库处于 RESTORING
状态,您将无法在实例上启用时间点恢复。如果导入失败,请执行以下操作之一以启用时间点恢复:
使用
--recovery-only
标志将处于RESTORING
状态的数据库置于在线状态。移除数据库。
若要使用差分数据库备份将数据导入 Cloud SQL 实例,请执行以下步骤:
gcloud
为导入操作创建 Cloud Storage 存储桶
gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
此步骤并非必需,但我们强烈建议您执行此步骤,以免您访问任何其他数据。
- 确保您已配置所需的角色和权限。
- 将数据从 BAK 文件上传到存储桶。
- 描述要向其中导入数据的实例:
gcloud sql instances describe INSTANCE_NAME
- 复制
serviceAccountEmailAddress
字段。 - 使用
gcloud storage buckets add-iam-policy-binding
向服务账号授予该存储桶的storage.objectViewer
IAM 角色。如需详细了解如何设置 IAM 权限,请参阅使用 IAM 权限。 使用
--no-recovery
导入完整备份。gcloud sql import bak INSTANCE_NAME gs://BUCKET_NAME/DIFFERENTIAL_BASE_FILENAME \ --database=DATABASE_NAME --bak-type=FULL --no-recovery
-
导入差分数据库备份。
gcloud sql import bak INSTANCE_NAME gs://BUCKET_NAME/DIFFERENTIAL_BACKUP_FILENAME \ --database=DATABASE_NAME --bak-type=DIFF --no-recovery
-
使用
--recovery-only
标志将导入的数据库处于在线状态。此步骤是可选的,只有当您的数据库处于RESTORING
状态时,您才需要执行此步骤。gcloud sql import bak INSTANCE_NAME \ --database=DATABASE_NAME --recovery-only
- 如果您不需要保留之前设置的 IAM 权限,请使用
gcloud storage buckets remove-iam-policy-binding
移除这些权限。
REST v1
- 创建 Cloud Storage 存储桶。
将文件上传到存储桶。
如需有关将文件上传到存储桶方面的帮助,请参阅上传对象。
- 为您的实例提供存储桶的
storage.objectAdmin
IAM 角色。如需详细了解如何设置 IAM 权限,请参阅使用 IAM 权限。 -
使用
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 响应:
- 导入差分数据库备份。
在使用任何请求数据之前,请先进行以下替换:
- 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 响应:
使用
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 响应:
- 如果您不需要保留之前设置的 IAM 权限,请移除这些权限。
REST v1beta4
- 创建 Cloud Storage 存储桶。
将文件上传到存储桶。
如需有关将文件上传到存储桶方面的帮助,请参阅上传对象。
- 为您的实例提供存储桶的
storage.objectAdmin
IAM 角色。如需详细了解如何设置 IAM 权限,请参阅 使用 IAM 权限。 -
使用
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 响应:
- 导入差分数据库备份。
在使用任何请求数据之前,请先进行以下替换:
- 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 响应:
使用
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 响应:
- 如果您不需要保留之前设置的 IAM 权限,请移除这些权限。
如果您收到 ERROR_RDBMS
等错误,请确保该存储桶中存在 BAK 文件,并且您具有该存储桶的正确权限。如需有关在 Cloud Storage 中配置访问权限控制方面的帮助,请参阅创建和管理访问控制列表。
导入事务日志备份
事务日志是数据库事务以及每个事务所做的修改的记录。在系统发生故障时,您可以使用它来重新建立数据库一致性。
如需使用事务日志备份将数据导入 Cloud SQL 实例,请执行以下步骤:
gcloud
-
gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
- 将备份文件上传到存储桶。
- 描述要向其中导入数据的实例:
gcloud sql instances describe INSTANCE_NAME
- 复制
serviceAccountEmailAddress
字段。 - 使用
gcloud storage buckets add-iam-policy-binding
向服务账号授予该存储桶的storage.objectViewer
IAM 角色。如需详细了解如何设置 IAM 权限,请参阅使用 IAM 权限。 使用
--no-recovery
参数导入完整备份。确保在完整备份导入后,数据库处于RESTORING
状态。gcloud sql import bak INSTANCE_NAME gs://BUCKET_NAME/BACKUP_FILENAME \ --database=DATABASE_NAME --bak-type=FULL --no-recovery
- 可选:导入差分备份。
-
导入事务日志备份。
替换以下内容: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
格式,则交易日志导入会在给定 日志序列号处停止。
-
可选:使用
--recovery-only
标志将导入的数据库处于在线状态。仅当数据库处于RESTORING
状态时,才应执行此步骤。gcloud sql import bak INSTANCE_NAME \ --database=DATABASE_NAME --recovery-only
- 如果您不需要保留之前设置的 IAM 权限,请使用
gcloud storage buckets remove-iam-policy-binding
移除这些权限。
REST v1
- 创建 Cloud Storage 存储桶。
将文件上传到存储桶。
如需有关将文件上传到存储桶方面的帮助,请参阅上传对象。
- 为您的实例提供存储桶的
storage.objectAdmin
IAM 角色。如需详细了解如何设置 IAM 权限,请参阅使用 IAM 权限。
如需查看该请求的完整参数列表,请参阅 instances:import 页面。
-
使用
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 响应:
- 可选:导入差分备份。
- 导入事务日志备份。
在使用任何请求数据之前,请先进行以下替换:
- 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 响应:
重复此步骤,直到导入所有事务日志备份。 可选:使用
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 响应:
- 如果您不需要保留之前设置的 IAM 权限,请移除这些权限。
REST v1beta4
- 创建 Cloud Storage 存储桶。
将文件上传到存储桶。
如需有关将文件上传到存储桶方面的帮助,请参阅上传对象。
- 为您的实例提供存储桶的
storage.objectAdmin
IAM 角色。如需详细了解如何设置 IAM 权限,请参阅 使用 IAM 权限。 -
使用
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 响应:
- 可选:导入差分备份。
- 导入事务日志备份。其中,
stopAt
和stopAtMark
是可选字段。在使用任何请求数据之前,请先进行以下替换:
- 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 响应:
重复此步骤,直到导入所有事务日志备份。 可选:使用
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 响应:
- 如果您不需要保留之前设置的 IAM 权限,请移除这些权限。
使用条带式导入
条带导入的优势如下:
- 减少完成操作所需的时间
- 可以导入大于 5 TB 的数据库
使用条带导入的潜在缺点是,在执行导入之前,条带集中的所有文件(而不是单个文件)必须上传到 Cloud Storage 存储桶中的同一文件夹。
规划操作
在大多数使用场景中,条带式导入可以实现更好的性能,没有缺点。但是,如果您无法从给定实例备份到条带集,或者您的数据库小于 5 TB,并且更高的性能并不重要,则您可能需要使用非条带导入。
如何使用条带导入
gcloud
为导入操作创建 Cloud Storage 存储桶
gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
此步骤并非必需,但强烈建议执行此步骤,确保您不会访问任何其他数据。
- 确保您已配置所需的 IAM 角色和权限。
- 在存储桶中创建一个新文件夹。
- 如需导入数据库,请将(数据库的)条带集的文件上传到新文件夹中。确保所有文件都上传到该文件夹,并且该文件夹中不包含任何额外文件。
- 描述要从中导出数据的实例:
gcloud sql instances describe INSTANCE_NAME
- 复制
serviceAccountEmailAddress
字段。 - 使用
gcloud storage buckets add-iam-policy-binding
向服务账号授予该存储桶的storage.objectViewer
IAM 角色。如需详细了解如何设置 IAM 权限,请参阅 使用 IAM 权限。 - 从文件夹导入数据。与非条带导入的区别在于,URI 链接到条带集上传到的文件夹(而不是单个文件)的名称,并且您可以指定
--striped
参数:gcloud beta sql import bak INSTANCE_NAME gs://BUCKET_NAME/FOLDER_NAME \ --database=DATABASE_NAME --striped
- 如果您不需要保留之前设置的 IAM 权限,请使用
gcloud storage buckets remove-iam-policy-binding
移除这些权限。
REST v1
- 创建 Cloud Storage 存储桶。
将文件上传到存储桶。
如需有关将文件上传到存储桶方面的帮助,请参阅上传对象。
- 为您的实例提供存储桶的
storage.objectAdmin
IAM 角色。如需详细了解如何设置 IAM 权限,请参阅使用 IAM 权限。 - 从文件导入数据:
在使用任何请求数据之前,请先进行以下替换:
- 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 响应:
如需使用其他用户身份执行导入操作,请指定
如需查看该请求的完整参数列表,请参阅 instances:import 页面。importContext.importUser
属性。 - 如果您不需要保留之前设置的 IAM 权限,请移除这些权限。
REST v1beta4
- 创建 Cloud Storage 存储桶。
将文件上传到存储桶。
如需有关将文件上传到存储桶方面的帮助,请参阅上传对象。
- 为您的实例提供存储桶的
storage.objectAdmin
IAM 角色。如需详细了解如何设置 IAM 权限,请参阅使用 IAM 权限。 - 从文件导入数据:
在使用任何请求数据之前,请先进行以下替换:
- 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 响应:
如需使用其他用户身份执行导入操作,请指定
如需查看该请求的完整参数列表,请参阅 instances:import 页面。importContext.importUser
属性。 - 如果您不需要保留之前设置的 IAM 权限,请移除这些权限。
如果出现类似 ERROR_RDBMS
的错误,请确保表已存在。如果表已存在,请确认您对存储桶拥有正确的权限。如需有关在 Cloud Storage 中配置访问权限控制方面的帮助,请参阅创建和管理访问控制列表。
后续步骤
- 了解如何查看导入和导出操作的状态。
- 详细了解导入和导出数据的最佳做法。
- 导入和导出的已知问题。