本页面介绍如何将文件并行导出和导入 Cloud SQL 实例。
须知事项
在开始导出或导入操作之前,请先做好以下准备工作:
- 确保您的数据库具有足够的可用空间。
- 遵循导出和导入数据的最佳做法。
- 完成导入操作后,请验证结果。
导出和导入操作会使用数据库资源,但不会干扰典型的数据库操作,除非实例预配不足。
将数据从 Cloud SQL for PostgreSQL 并行导出到多个文件
以下部分介绍如何将数据从 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 中多个文件中的数据并行导出到 Cloud Storage。为此,请将pg_dump
实用程序与 --jobs
选项搭配使用。
如果您打算将数据导入 Cloud SQL,请按照从外部数据库服务器导出数据中的说明操作,以便使文件格式适合 Cloud SQL。
gcloud
如需将数据从 Cloud SQL 并行导出到多个文件,请完成以下步骤:
- 创建 Cloud Storage 存储桶。
- 如需查找要导出文件的 Cloud SQL 实例的服务账号,请使用
gcloud sql instances describe
命令。gcloud sql instances describe INSTANCE_NAME
- 如需向服务账号授予
storage.objectAdmin
IAM 角色,请使用gcloud storage buckets add-iam-policy-binding
命令。如需有关设置 IAM 权限的帮助,请参阅使用 IAM 权限。 - 如需将数据从 Cloud SQL 并行导出到多个文件,请使用
gcloud sql export sql
命令:gcloud sql export sql INSTANCE_NAME gs://BUCKET_NAME/BUCKET_PATH/FOLDER_NAME \ --offload \ --parallel \ --threads=THREAD_NUMBER \ --database=DATABASE_NAME \ --table=TABLE_EXPRESSION
进行以下替换:
- INSTANCE_NAME:要并行导出文件的 Cloud SQL 实例的名称。
- BUCKET_NAME:Cloud Storage 存储桶的名称。
- BUCKET_PATH:存储导出文件的存储桶的路径。
- FOLDER_NAME:存储导出文件的文件夹。
- THREAD_NUMBER:Cloud SQL 用于并行导出文件的线程数。例如,如果要同时导出三个文件,请指定
3
作为此参数的值。 - DATABASE_NAME:Cloud SQL 实例中的数据库的名称,您将从该数据库执行导出。您只能指定一个数据库。
- TABLE_EXPRESSION:要从指定数据库导出的表。
export sql
命令不包含触发器或存储过程,但包含视图。如需导出触发器或存储过程,请使用单线程进行导出。此线程使用pg_dump
工具。导出完成后,Cloud Storage 存储桶中的文件夹应包含
pg_dump
目录格式的文件。 - 如果您不需要在从 Cloud SQL for PostgreSQL 导出所需的角色和权限中设置的 IAM 角色,请撤销该角色。
将 INSTANCE_NAME 替换为您的 Cloud SQL 实例的名称。
在输出中,查找与 serviceAccountEmailAddress
字段关联的值。
REST v1
如需将数据从 Cloud SQL 并行导出到多个文件,请完成以下步骤:
- 创建 Cloud Storage 存储桶,请运行以下命令:
进行以下替换:gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_NAME
- BUCKET_NAME:存储桶的名称(须遵循命名要求)。例如
my-bucket
。 - PROJECT_NAME:包含您要创建的 Cloud Storage 存储桶的 Google Cloud 项目的名称。
- LOCATION_NAME:要存储导出文件的存储桶的位置。例如
us-east1
。
- BUCKET_NAME:存储桶的名称(须遵循命名要求)。例如
- 为您的实例提供存储桶的
legacyBucketWriter
IAM 角色。如需有关设置 IAM 权限的帮助,请参阅使用 IAM 权限。 -
将数据从 Cloud SQL 并行导出到多个文件:
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_NAME:包含您创建的 Cloud Storage 存储桶的 Google Cloud 项目的名称。
- INSTANCE_NAME:要并行导出文件的 Cloud SQL 实例的名称。
- BUCKET_NAME:Cloud Storage 存储桶的名称。
- BUCKET_PATH:存储导出文件的存储桶的路径。
- FOLDER_NAME:存储导出文件的文件夹。
- DATABASE_NAME:Cloud SQL 实例中的数据库的名称,您将从该数据库执行导出。您只能指定一个数据库。
- THREAD_NUMBER:Cloud SQL 用于并行导出文件的线程数。例如,如果要同时导出三个文件,请指定
3
作为此参数的值。
HTTP 方法和网址:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_NAME/instances/INSTANCE_NAME/export
请求 JSON 正文:
{ "exportContext": { "fileType": "SQL", "uri": "gs://BUCKET_NAME/BUCKET_PATH/FOLDER_NAME", "databases": ["DATABASE_NAME"], "offload": [TRUE|FALSE], "sqlExportOptions": { "parallel": [TRUE|FALSE], "threads": [THREAD_NUMBER] } } }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
- 如果您不需要在从 Cloud SQL for PostgreSQL 导出所需的角色和权限中设置的 IAM 角色,请撤销该角色。
导出完成后,Cloud Storage 存储桶中的文件夹应包含 pg_dump
目录格式的文件。
REST v1beta4
如需将数据从 Cloud SQL 并行导出到多个文件,请完成以下步骤:
- 创建 Cloud Storage 存储桶,请运行以下命令:
进行以下替换:gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_NAME
- BUCKET_NAME:存储桶的名称(须遵循命名要求)。例如
my-bucket
。 - PROJECT_NAME:包含您要创建的 Cloud Storage 存储桶的 Google Cloud 项目的名称。
- LOCATION_NAME:要存储导出文件的存储桶的位置。例如
us-east1
。
- BUCKET_NAME:存储桶的名称(须遵循命名要求)。例如
- 为您的实例提供存储桶的
storage.objectAdmin
IAM 角色。如需有关设置 IAM 权限的帮助,请参阅使用 IAM 权限。 -
将数据从 Cloud SQL 并行导出到多个文件:
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_NAME:包含您创建的 Cloud Storage 存储桶的 Google Cloud 项目的名称。
- INSTANCE_NAME:要并行导出文件的 Cloud SQL 实例的名称。
- BUCKET_NAME:Cloud Storage 存储桶的名称。
- BUCKET_PATH:存储导出文件的存储桶的路径。
- FOLDER_NAME:存储导出文件的文件夹。
- DATABASE_NAME:Cloud SQL 实例中的数据库的名称,您将从该数据库执行导出。您只能指定一个数据库。
- THREAD_NUMBER:Cloud SQL 用于并行导出文件的线程数。例如,如果要同时导出三个文件,请指定
3
作为此参数的值。
HTTP 方法和网址:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_NAME/instances/INSTANCE_NAME/export
请求 JSON 正文:
{ "exportContext": { "fileType": "SQL", "uri": "gs://BUCKET_NAME/BUCKET_PATH/FOLDER_NAME", "databases": ["DATABASE_NAME"], "offload": [TRUE|FALSE], "sqlExportOptions": { "parallel": [TRUE|FALSE], "threads": [THREAD_NUMBER] } } }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
- 如果您不需要在从 Cloud SQL for PostgreSQL 导出所需的角色和权限中设置的 IAM 角色,请撤销该角色。
导出完成后,Cloud Storage 存储桶中的文件夹应包含 pg_dump
目录格式的文件。
将多个文件中的数据并行导入 Cloud SQL for PostgreSQL
以下部分介绍如何将多个文件中的数据并行导入 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。
将数据导入到 Cloud SQL for PostgreSQL
您可以将 Cloud Storage 中多个文件的数据并行导入到数据库中。为此,请将 pg_restore
实用程序与 --jobs
选项搭配使用。
gcloud
如需将多个文件中的数据并行导入 Cloud SQL,请完成以下步骤:
- 创建 Cloud Storage 存储桶。
将文件上传到存储桶。
如需有关将文件上传到存储桶方面的帮助,请参阅从文件上传对象。
- 如需查找要导入文件的 Cloud SQL 实例的服务账号,请使用
gcloud sql instances describe
命令。gcloud sql instances describe INSTANCE_NAME
- 如需向服务账号授予
storage.objectAdmin
IAM 角色,请使用gcloud storage buckets add-iam-policy-binding
实用程序。如需有关设置 IAM 权限的帮助,请参阅使用 IAM 权限。 - 如需将多个文件中的数据并行导入 Cloud SQL,请使用
gcloud sql import sql
命令:gcloud sql import sql INSTANCE_NAME gs://BUCKET_NAME/BUCKET_PATH/FOLDER_NAME \ --offload \ --parallel \ --threads=THREAD_NUMBER \ --database=DATABASE_NAME
进行以下替换:
- INSTANCE_NAME:Cloud SQL 实例的名称,您将向其中并行导入文件。
- BUCKET_NAME:Cloud Storage 存储桶的名称。
- BUCKET_PATH:存储导入文件的存储桶的路径。
- FOLDER_NAME:存储导入文件的文件夹。
- THREAD_NUMBER:Cloud SQL 用于并行导入文件的线程数。例如,如果要同时导入三个文件,请指定
3
作为此参数的值。 - DATABASE_NAME:Cloud SQL 实例中的数据库的名称,您将从该数据库执行导入。您只能指定一个数据库。
如果该命令返回
ERROR_RDBMS
之类的错误,请检查权限;此类错误通常是由权限问题导致的。 - 如果您不需要在导入 Cloud SQL for PostgreSQL 所需的角色和权限中设置的 IAM 权限,请使用
gcloud storage buckets remove-iam-policy-binding
移除相应权限。
将 INSTANCE_NAME 替换为您的 Cloud SQL 实例的名称。
在输出中,查找与 serviceAccountEmailAddress
字段关联的值。
REST v1
如需将多个文件中的数据并行导入 Cloud SQL,请完成以下步骤:
- 创建 Cloud Storage 存储桶,请运行以下命令:
进行以下替换:gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_NAME
- BUCKET_NAME:存储桶的名称(须遵循命名要求)。例如
my-bucket
。 - PROJECT_NAME:包含您要创建的 Cloud Storage 存储桶的 Google Cloud 项目的名称。
- LOCATION_NAME:要存储导入文件的存储桶的位置。例如
us-east1
。
- BUCKET_NAME:存储桶的名称(须遵循命名要求)。例如
将文件上传到存储桶。
如需有关将文件上传到存储桶方面的帮助,请参阅从文件上传对象。
- 为您的实例提供存储桶的
storage.objectAdmin
IAM 角色。如需有关设置 IAM 权限的帮助,请参阅使用 IAM 权限。 将多个文件中的数据并行导入 Cloud SQL:
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_NAME:包含您创建的 Cloud Storage 存储桶的 Google Cloud 项目的名称。
- INSTANCE_NAME:Cloud SQL 实例的名称,您将向其中并行导入文件。
- BUCKET_NAME:Cloud Storage 存储桶的名称。
- BUCKET_PATH:存储导入文件的存储桶的路径。
- FOLDER_NAME:存储导入文件的文件夹。
- DATABASE_NAME:Cloud SQL 实例中的数据库的名称,您将从该数据库执行导入。您只能指定一个数据库。
- THREAD_NUMBER:Cloud SQL 用于并行导入文件的线程数。例如,如果要同时导入三个文件,请指定
3
作为此参数的值。
HTTP 方法和网址:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_NAME/instances/INSTANCE_NAME/import
请求 JSON 正文:
{ "importContext": { "fileType": "SQL", "uri": "gs://BUCKET_NAME/BUCKET_PATH/FOLDER_NAME", "databases": ["DATABASE_NAME"], "offload": [TRUE|FALSE], "sqlImportOptions": { "parallel": [TRUE|FALSE], "clean": [TRUE|FALSE], "ifExists": [TRUE|FALSE], "threads": [THREAD_NUMBER] } } }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
如需使用其他用户身份执行导入操作,请指定
如需查看请求参数的完整列表,请参阅 Cloud SQL Admin API 页面。importContext.importUser
属性。- 如果您不需要在导入 Cloud SQL for PostgreSQL 所需的角色和权限中设置的 IAM 权限,请使用
gcloud storage buckets remove-iam-policy-binding
移除相应权限。
REST v1beta4
如需将多个文件中的数据并行导入 Cloud SQL,请完成以下步骤:
- 创建 Cloud Storage 存储桶,请运行以下命令:
进行以下替换:gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_NAME
- BUCKET_NAME:存储桶的名称(须遵循命名要求)。例如
my-bucket
。 - PROJECT_NAME:包含您要创建的 Cloud Storage 存储桶的 Google Cloud 项目的名称。
- LOCATION_NAME:要存储导入文件的存储桶的位置。例如
us-east1
。
- BUCKET_NAME:存储桶的名称(须遵循命名要求)。例如
将文件上传到存储桶。
如需有关将文件上传到存储桶方面的帮助,请参阅从文件上传对象。
- 为您的实例提供存储桶的
storage.objectAdmin
IAM 角色。如需有关设置 IAM 权限的帮助,请参阅使用 IAM 权限。 将多个文件中的数据并行导入 Cloud SQL:
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_NAME:包含您创建的 Cloud Storage 存储桶的 Google Cloud 项目的名称。
- INSTANCE_NAME:Cloud SQL 实例的名称,您将从其并行导入文件。
- BUCKET_NAME:Cloud Storage 存储桶的名称。
- BUCKET_PATH:存储导入文件的存储桶的路径。
- FOLDER_NAME:存储导入文件的文件夹。
- DATABASE_NAME:Cloud SQL 实例中的数据库的名称,您将从该数据库执行导入。您只能指定一个数据库。
- THREAD_NUMBER:Cloud SQL 用于并行导入文件的线程数。例如,如果要同时导入三个文件,请指定
3
作为此参数的值。
HTTP 方法和网址:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_NAME/instances/INSTANCE_NAME/import
请求 JSON 正文:
{ "importContext": { "fileType": "SQL", "uri": "gs://BUCKET_NAME/BUCKET_PATH/FOLDER_NAME", "databases": ["DATABASE_NAME"], "offload": [TRUE|FALSE], "sqlImportOptions": { "parallel": [TRUE|FALSE], "clean": [TRUE|FALSE], "ifExists": [TRUE|FALSE], "threads": [THREAD_NUMBER] } } }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
如需使用其他用户身份执行导入操作,请指定
如需查看请求参数的完整列表,请参阅 Cloud SQL Admin API 页面。importContext.importUser
属性。- 如果您不需要在导入 Cloud SQL for PostgreSQL 所需的角色和权限中设置的 IAM 权限,请使用
gcloud storage buckets remove-iam-policy-binding
移除相应权限。
限制
- 如果在并行导入或导出多个文件中的数据时指定过多线程,则内存用量可能会超过 Cloud SQL 实例拥有的内存。如果发生这种情况,系统会显示内部错误消息。请检查实例的内存用量,并根据需要增加实例的大小。如需了解详情,请参阅实例设置简介。
- 执行导出时,不支持在
databases
或tables
字段中的数据库名称或表名称中使用英文逗号。 - 请确保您有足够的磁盘可用空间用于下载初始转储文件。否则,系统会显示
no space left on disk
错误。 - 如果实例只有一个虚拟 CPU (vCPU),则无法并行导入或导出多个文件。实例的 vCPU 数不能小于用于导入或导出操作的线程数,并且线程数必须至少为 2。
pg_dump
实用程序无法对导出的任何表进行分块。因此,如果您的表非常大,则可能会成为导出操作速度的瓶颈。
后续步骤
- 了解如何查看导入和导出操作的状态。
- 了解如何取消导入和导出数据。
- 了解导入和导出数据的最佳实践。
- 了解导入和导出的已知问题。