本页面介绍如何将 Cloud SQL 实例数据导出为 SQL 转储文件以及使用 SQL 转储文件将数据导入 Cloud SQL 实例。
须知事项
导出操作会使用数据库资源,但不会干扰正常的数据库操作,除非实例预配不足。
如需最佳实践,请参阅导入和导出数据的最佳实践。
完成导入操作后,请验证结果。
从 Cloud SQL for PostgreSQL 导出数据
从 Cloud SQL for PostgreSQL 导出所需的角色和权限
如需将数据从 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
(仅用于并行导出文件)
如需有关 IAM 角色的帮助,请参阅 Identity and Access Management。
从 Cloud SQL for PostgreSQL 导出到 SQL 转储文件
使用 Cloud SQL 执行导出时(无论是从 Google Cloud 控制台、gcloud CLI 还是从 API 导出),都要使用pg_dump
实用程序并指定必需选项,以确保生成的导出文件可重新导入 Cloud SQL。
如果您打算将数据导入 Cloud SQL,则必须按照从外部数据库服务器导出数据中的说明操作,以便为 Cloud SQL 正确设置 SQL 转储文件格式。
如需将 Cloud SQL 实例上的数据库数据导出到 Cloud Storage 存储桶中的 SQL 转储文件,请执行以下操作:
控制台
-
在 Google Cloud 控制台中,转到 Cloud SQL 实例页面。
- 如需打开实例的概览页面,请点击实例名称。
- 点击导出。
- 在文件格式部分中,点击 SQL 以创建 SQL 转储文件。
- 在要导出的数据部分,使用下拉菜单选择要从中导出数据的数据库。
- 在目标位置部分,选择浏览以搜索用于导出的 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 权限。 - 将数据库导出到您的 Cloud Storage 存储桶:
gcloud sql export sql INSTANCE_NAME gs://BUCKET_NAME/sqldumpfile.gz \ --database=DATABASE_NAME \ --offload
export sql
命令不包含触发器或存储过程,但包含视图。 如需导出触发器和/或存储过程,请使用 pg_dump 工具。如需详细了解如何使用
export sql
命令,请参阅sql export sql
命令参考页面。 - 如果您不需要保留之前设置的 IAM 角色,请立即撤消该角色。
REST v1
- 为导出创建一个存储桶:
gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_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 正文:
{ "exportContext": { "fileType": "SQL", "uri": "gs://BUCKET_NAME/PATH_TO_DUMP_FILE", "databases": ["DATABASE_NAME"], "offload": TRUE | FALSE, "sqlExportOptions": { "clean": [TRUE|FALSE], "ifExists": [TRUE|FALSE] } } }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
- 如果您不需要保留之前设置的 IAM 角色,请立即移除该角色。
REST v1beta4
- 为导出创建一个存储桶:
gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_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 正文:
{ "exportContext": { "fileType": "SQL", "uri": "gs://BUCKET_NAME/PATH_TO_DUMP_FILE", "databases": ["DATABASE_NAME"], "offload": TRUE | FALSE, "sqlExportOptions": { "clean": [TRUE|FALSE], "ifExists": [TRUE|FALSE] } } }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
- 如果您不需要保留之前设置的 IAM 角色,请立即撤消该角色。
将数据导入到 Cloud SQL for PostgreSQL
导入到 Cloud SQL for PostgreSQL 所需的角色和权限
如需将数据从 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。
将 SQL 转储文件导入 Cloud SQL for PostgreSQL
SQL 文件是包含一系列 SQL 命令的纯文本文件。
控制台
-
在 Google Cloud 控制台中,转到 Cloud SQL 实例页面。
- 如需打开实例的概览页面,请点击实例名称。
- 点击导入。
- 在选择您要从中导入数据的文件部分中,输入要用于导入的存储桶和 SQL 转储文件的路径,或浏览到现有文件。
您可以导入经过压缩 (
.gz
) 或未经压缩 (.sql
) 的文件。 - 对于格式,请选择 SQL。
选择要导入数据的数据库。
这样,Cloud SQL 会在导入数据之前运行
USE DATABASE
语句。如果要指定用户来执行导入,请选择该用户。
如果导入文件包含必须由特定用户执行的语句,请使用此字段指定该用户。
- 点击导入以开始导入。
gcloud
- 创建 Cloud Storage 存储桶。
将文件上传到存储桶。
如需有关将文件上传到存储桶方面的帮助,请参阅上传对象。
- 描述要向其中导入数据的实例:
gcloud sql instances describe INSTANCE_NAME
- 复制
serviceAccountEmailAddress
字段。 - 使用
gcloud storage buckets add-iam-policy-binding
向服务账号授予该存储桶的storage.objectAdmin
IAM 角色。 如需有关设置 IAM 权限的帮助,请参阅使用 IAM 权限。gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:SERVICE-ACCOUNT \ --role=roles/storage.objectAdmin
- 导入数据库:
gcloud sql import sql INSTANCE_NAME gs://BUCKET_NAME/IMPORT_FILE_NAME \ --database=DATABASE_NAME
如需了解如何使用
import sql
命令,请参阅sql import sql
命令参考页面。如果该命令返回
ERROR_RDBMS
之类的错误,请检查权限;此类错误通常是由权限问题导致的。 - 如果您不需要保留之前设置的 IAM 权限,请使用
gcloud storage buckets remove-iam-policy-binding
移除这些权限。
REST v1
-
创建 SQL 转储文件。链接中的说明会设置特定标志,使转储文件与 Cloud SQL 兼容。
- 如果您要从本地 PostgreSQL 服务器导入数据,请执行以下操作:
- 按照使用 pg_dump 导出数据中的说明创建 SQL 转储文件。
- 按照创建存储桶中的说明在 Cloud Storage 中创建存储桶。
- 按照上传对象中的步骤将 SQL 转储文件上传到 Cloud Storage 存储桶。
- 创建 Cloud Storage 存储桶。
将文件上传到存储桶。
如需有关将文件上传到存储桶方面的帮助,请参阅上传对象。
- 为您的实例提供存储桶的
legacyBucketWriter
和objectViewer
IAM 角色。如需有关设置 IAM 权限的帮助,请参阅使用 IAM 权限。 - 导入转储文件:
在使用任何请求数据之前,请先进行以下替换:
- project-id:项目 ID
- instance-id:实例 ID
- bucket_name:Cloud Storage 存储桶名称
- path_to_sql_file:SQL 文件的路径
- database_name:Cloud SQL 实例中数据库的名称
HTTP 方法和网址:
POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/import
请求 JSON 正文:
{ "importContext": { "fileType": "SQL", "uri": "gs://bucket_name/path_to_sql_file", "database": "database_name" } }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
如需使用其他用户身份执行导入操作,请指定
如需查看该请求的完整参数列表,请参阅 instances:import 页面。importContext.importUser
属性。 - 如果您不需要保留之前设置的 IAM 权限,请立即移除这些权限。
REST v1beta4
-
创建 SQL 转储文件。链接中的说明会设置特定标志,使转储文件与 Cloud SQL 兼容。
- 如果您要从本地 PostgreSQL 服务器导入数据,请执行以下操作:
- 按照使用 pg_dump 导出数据中的说明创建 SQL 转储文件。
- 按照创建存储桶中的说明在 Cloud Storage 中创建存储桶。
- 按照上传对象中的步骤将 SQL 转储文件上传到 Cloud Storage 存储桶。
- 创建 Cloud Storage 存储桶。
将文件上传到存储桶。
如需有关将文件上传到存储桶方面的帮助,请参阅上传对象。
- 为您的实例提供存储桶的
storage.objectAdmin
IAM 角色。如需有关设置 IAM 权限的帮助,请参阅使用 IAM 权限。 - 导入转储文件:
在使用任何请求数据之前,请先进行以下替换:
- project-id:项目 ID
- instance-id:实例 ID
- bucket_name:Cloud Storage 存储桶名称
- path_to_sql_file:SQL 文件的路径
- database_name:Cloud SQL 实例中数据库的名称
HTTP 方法和网址:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/import
请求 JSON 正文:
{ "importContext": { "fileType": "SQL", "uri": "gs://bucket_name/path_to_sql_file", "database": "database_name" } }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
如需使用其他用户身份执行导入操作,请指定
如需查看该请求的完整参数列表,请参阅 instances:import 页面。importContext.importUser
属性。 - 如果您不需要保留之前设置的 IAM 权限,请立即移除这些权限。
后续步骤
- 了解如何查看导入和导出操作的状态。
- 详细了解导入和导出数据的最佳做法。
- 详细了解 Cloud Storage。
- 导入和导出的已知问题。