导入和导出数据的最佳做法

本页面介绍了使用 Cloud SQL 导入和导出数据的最佳做法。如需了解将数据导入 Cloud SQL 的分步说明,请参阅导入数据。如需了解导出数据(无论是位于 Cloud SQL 中的数据还是位于您所管理实例中的数据)的分步说明,请参阅导出数据

导入和导出最佳做法

以下是导入和导出数据时要考虑的最佳做法:

请勿使用 Cloud Storage 请求者付款存储分区

您无法使用启用了请求者付款功能的 Cloud Storage 存储分区来将数据导入 Cloud SQL 以及从 Cloud SQL 导出数据。

使用无服务器导出从主实例分流导出操作

从 Cloud SQL 执行标准导出时,导出操作会在数据库在线时运行。当导出的数据库比较小时,影响很小。但是,对于大型数据库或大型对象(例如数据库中的 BLOB),导出操作可能会降低数据库性能。这可能会影响对数据库执行数据库查询和操作所需的时间。启动导出操作后,如果数据库响应开始变得缓慢,则您无法停止导出操作。

为了防止导出期间响应缓慢,您可以使用无服务器导出功能。使用无服务器导出功能时,Cloud SQL 会创建一个单独的临时实例来分流导出操作。如果分流导出操作,则主实例上的数据库可以按正常的性能速率继续处理查询和执行操作。数据导出操作完成后,临时实例会被自动删除。

使用带有 offload 标志的 gcloud 或 REST API 导出函数执行无服务器导出操作。

在无服务器导出操作期间,您可以运行一些其他操作,例如实例修改、导入和故障转移。但是,如果您选择 delete,导出操作会在您删除实例一段时间后停止,并且不会导出任何数据。

与标准导出操作相比,无服务器导出操作需要的时间更长,因为创建临时实例需要时间。实际需要的时间超过五分钟;对于较大的数据库,需要的时间可能更长。在确定要使用哪种类型的导出功能之前,请考虑其对时间和性能的影响。

您可以在主实例或读取副本上使用无服务器导出功能。

创建 SQL 转储文件时使用正确的标志

如果您在将数据导出到 SQL 转储文件时没有使用正确的过程,导入操作可能会失败。如需了解如何创建 SQL 转储文件以导入到 Cloud SQL,请参阅导出数据

压缩数据以减少费用

Cloud SQL 支持导入和导出压缩文件及未压缩文件。压缩文件可以节省 Cloud Storage 上的大量存储空间并减少存储费用,这在导出大型实例时尤为明显。

导出 SQL 转储文件或 CSV 文件时,请将数据压缩成扩展名为 .gz 的文件。导入扩展名为 .gz 的文件时,系统会自动将其解压缩。

减少长时间运行的导入和导出过程

使用导入功能(通过 Cloud Storage 存储分区)导入到 Cloud SQL 以及从 Cloud SQL 导出可能需要很长时间才能完成,具体取决于数据库的大小。这可能产生以下影响:

  • 您无法停止长时间运行的 Cloud SQL 实例操作。
  • 针对每个实例,每次仅可执行一项导入或导出操作。

对小批量数据使用 Cloud SQL 导入或导出功能可以缩短每项操作的完成时间。

对于导出,您可以使用无服务器导出来最大限度地降低对数据库性能的影响,并允许其他操作在导出运行时在实例上运行。

如需更多提示,请参阅诊断 Cloud SQL 实例的问题

验证导入的数据库

导入操作完成后,连接到您的数据库并运行相应的数据库命令,以确保内容正确无误。例如,连接并列出数据库、表和特定条目。

已知限制

如需查看已知限制列表,请参阅导入和导出数据的问题

自动执行导出操作

尽管 Cloud SQL 没有提供自动导出数据库的内置方法,但是您可以使用多个 Google Cloud 组件构建自己的自动化工具。如需了解详情,请参阅本教程

问题排查

排查导入操作问题

问题 问题排查
导入操作花费的时间太长。 过多的有效连接可能会干扰导入操作。

关闭未使用的操作。检查 Cloud SQL 实例的 CPU 和内存用量,以确保有大量的可用资源。确保将最多资源用于导入操作的最佳方法是在开始执行操作之前重启实例。

重启后,系统会执行以下操作:

  • 关闭所有连接。
  • 结束任何可能正在消耗资源的任务。
如果转储文件中引用的一个或多个用户不存在,导入操作可能会失败。 在导入转储文件之前,拥有对象或获得了对转储数据库中的对象权限的所有数据库用户都必须存在于目标数据库中。否则,导入操作将无法使用原始所有权或权限重新创建对象。

在导入之前,先创建数据库用户

排查导出操作问题

问题 问题排查
CSV 导出成功,但 SQL 导出失败。 CSV 和 SQL 格式的导出方式不同。SQL 格式会导出整个数据库,可能需要较长的时间才能完成。CSV 格式可让您定义要导出的数据库元素。

使用 CSV 导出以仅导出您需要的文件。

导出时间太长。 Cloud SQL 不支持并发同步操作。

使用导出分流。概括来讲,在进行导出分流时,Cloud SQL 会启动一个分流实例来执行导出,而不是在源实例上发起导出。导出分流具有多项优势,包括可提高源实例的性能,以及在导出操作期间取消屏蔽管理操作。使用导出分流时,总延迟时间会增加,因为启动分流实例需要时间。通常,对于规模合理的导出,延迟时间并不明显。但是,如果导出作业足够小,那么您可能会注意到延迟时间有所增加。

创建扩展程序错误。 转储文件包含对不受支持的扩展程序的引用。

修改转储文件以移除引用

使用 pg_dumpall 时出错。 该工具需要超级用户角色,而 Cloud SQL for PostgreSQL 中不支持超级用户角色。
导出操作在导出任何内容之前超时,并显示错误消息 Could not receive data from client: Connection reset by peer. 如果 Cloud Storage 在特定时间范围内(通常是大约七分钟内)未收到任何数据,则连接会重置。初始导出查询的运行时间可能过长。

使用 pg_dump 工具执行手动导出。

您希望自动执行导出。 Cloud SQL 不提供自动执行导出的方法。

您可以使用 Cloud Scheduler、Pub/Sub 和 Cloud Functions 等 Google Cloud 产品构建自己的自动导出系统,类似自动备份一文所述。

后续步骤