Cloud SQL for PostgreSQL 常见问题解答

简介

什么是 Cloud SQL?
Cloud SQL 是一种可在云端提供全代管式 SQL 数据库的服务。Cloud SQL 提供了 PostgreSQL、SQL Server、MySQL 数据库。
使用 Cloud SQL 有哪些好处?
借助 Cloud SQL,您可以将那些必不可少而又往往十分耗时的例行任务(例如,应用补丁程序和更新、管理备份及配置复制功能)交由 Google 处理,从而让您可以集中精力来构建出色的应用。此外,由于我们使用标准传输协议,因此您可以随时随地从几乎任何应用连接到 Cloud SQL。
Cloud SQL 可提供哪些数据库版本?如何管理更新?

Cloud SQL for PostgreSQL 支持 PostgreSQL 9.6、10、11、12、13、14、15、16(默认)和 17。

次要版本更新在计划维护期间进行部署,您无需执行进一步操作。如需详细了解更新,请参阅 Cloud SQL 实例维护概览

如需查看实例的当前版本,请转到 Google Cloud 控制台,然后点击相应的实例名称,以打开实例详情页面。您也可以使用 gcloud sql instances describe 命令。

Cloud SQL 是否支持所有数据库功能?
Cloud SQL 支持 PostgreSQL 的大多数常见功能。如需查看列举标准 PostgreSQL 与 Cloud SQL 功能之间所有差异的列表,请参阅 Cloud SQL 与标准 PostgreSQL 功能之间的差异
是否存在任何大小或 QPS 限制?
Cloud SQL 实例不存在每秒查询次数 (QPS) 限制。如需了解连接、大小和 App Engine 特定方面的限制,请参阅配额和限制
如何在 Cloud SQL 发生任何更改时收到通知?
您可以注册加入 google-cloud-sql-announce 论坛,我们会在这里发布有关 Cloud SQL 的公告和新闻。
如何报告 Bug、提出功能需求或咨询问题?
您可以加入我们的 google-cloud-sql-discuss 群组来报告 Bug 以及提出功能需求,还可以前往 Stack Overflow 咨询问题。如需了解其他支持选项,请参阅 Cloud SQL 支持页面。
返回页首

开始使用

为何不含任何数据的新实例显示已占用磁盘空间?
当您创建实例时,Cloud SQL 和数据库会使用一些空间来存储系统文件及元数据。
返回页首

数据存储、复制和身份验证

我的数据存储在何处?

实例数据存储在实例所在的区域中。 如果未指定存储位置,则备份将存储地理位置最靠近 Cloud SQL 实例位置的多区域中。例如,如果 Cloud SQL 实例位于 us-central1,则默认情况下,备份存储在 us 多区域中。但是,像 australia-southeast1 这样的默认位置不在多区域范围之内。最接近的多区域是 asia

什么是可用区?

可用区是指特定地理位置内您可以在其中运行资源的一个独立实体。例如,名为 us-central1-a 的可用区表示美国中部的一个位置。

如需详细了解可用区,请参阅 Compute Engine 文档中的可用区资源

存储空间有何限制?
如需了解存储空间限制,请参阅配额和限制
我的数据是如何复制的?

PostgreSQL 实例提供高可用性配置读取副本

我可以创建什么类型的读取副本?

如需详细了解读取副本(包括各种类型的使用场景),请参阅复制选项

Cloud SQL 故障切换的工作原理是什么?

如需了解故障切换,请参阅高可用性配置概览

我的数据加密了吗?
无论 Cloud SQL 客户数据是存储在数据库表、临时文件还是备份中,数据均处于加密状态。您可以使用 SSLCloud SQL Auth 代理对外部连接进行加密。
如何管理存储中的数据(静态数据)的加密?

您的数据将使用 256 位高级加密标准 (AES-256) 进行加密,或者采用更严格的对称密钥,也就是说:加密存储中的数据和解密使用中的数据时,采用的是相同密钥。这些数据密钥本身采用存储在一个安全密钥存储区中的密钥进行加密,并会定期更改。

如需了解详情,请参阅 Google Cloud 中的静态加密

如何管理传输中的数据的加密?

如果数据将移出物理边界,脱离 Google 或 Google 授权代理方的控制范围,Google 会在一个或多个网络层对传输中的所有数据进行加密和身份验证。如果传输中的数据位于物理边界内部,可由 Google 或 Google 授权代理方掌控,我们通常会对这些数据进行身份验证,但默认情况下可能不会进行加密。如果您使用实例的公共 IP 地址连接到该实例,请使用 SSL/TLS 证书,以确保数据在传输期间安全无虞。您可以根据威胁模型选择要应用哪些额外的安全措施。例如,您可以为可用区内的 Cloud SQL 连接配置 SSL

如需了解详情,请参阅 Google Cloud 中的传输加密

返回页首

数据迁移

数据和限制条件如何迁移到 Cloud SQL?
在迁移过程中,数据会先迁移,之后会在实例上重新创建限制条件(例如主键、外键和索引)。
如何可以更快地迁移数据?
您现在可以并行迁移数据库表中的数据。这样做可以提高性能,因为 Cloud SQL 可以使用并行进程转移数据库中数据。您可以设置 Cloud SQL 将这些数据转移到 minoptimalmax 的速度。如需了解详情,请参阅使用托管式导入设置从外部数据库复制
返回页首

备份与恢复

如何恢复实例?

如需从备份文件恢复实例,您可以使用 Google Cloud 控制台gcloud 命令行工具。如需了解详情,请参阅恢复实例

如需将实例恢复到特定时间点,可使用时间点恢复。如需了解详情,请参阅使用时间点恢复

备份的费用是多少?

备份按实例存储费率计费。

如需详细了解实例存储价格和实例费率,请参阅价格

我可以访问七天前的自动备份内容吗?

自动备份每天进行一次,并默认保留七天。您可以配置备份保留值(可配置为 1 到 365 个备份)。保留期限结束时,将删除最早的备份。自动备份采用增量方式。这些备份仅包含自上次备份以来发生了更改的数据。最早备份的大小与数据库的大小相似。删除最早的备份后,下一个最早备份的大小将会增加,因此仍然存在完整备份。

请注意,按需备份在您手动移除之前不会被删除。

我何时使用外部复制(而非跨区域复制)进行区域故障防护?
外部复制 跨区域复制
由客户自行管理 Cloud SQL 托管跨区域副本
可以在非 Google Cloud 实例和 Google Cloud 实例之间进行复制 只能在 Cloud SQL 实例之间进行复制
迁移至/出 Google Cloud 以最大程度地减少停机时间或保护混合/多云数据 在 Google Cloud 区域之间迁移数据以最大限度地减少停机时间
支持跨主要版本复制 不支持跨主要版本复制
返回页首

管理您的实例

哪些操作可能会导致 Cloud SQL 实例重启?
当您或 Cloud SQL 执行以下操作时,Cloud SQL 实例可能会重启:
  • 更新
  • 创建
  • 提升副本
  • 维护
  • 重新创建副本
  • 故障切换
  • 重启
  • 使用备份恢复实例
  • 在现有实例上启用高可用性(这是对实例进行更新)
  • 添加需要重启的数据库标志

重启实例不会更改实例的公共或专用 IP 地址。

请参阅以下部分:重启期间实例关停多久?

重启期间实例会关停多久?

重启实例时,大多数实例会关停一到两分钟。 实例关停前,系统会终止所有连接,并且从磁盘中清空当前工作。

对于具有大型负载的实例,此过程需要更长时间,可能看起来就像实例卡住了。在这些情况下,实例关停和重启可能需要长达 1 个小时的时间。如果实例需要较长时间才能关停和重启,则可能是因为用户拥有过多写入事务或是事务运行时间过长。

我可以扩大或缩小数据库规模吗?

您可以随时增加可供您的实例使用的存储空间量,而且不会造成停机。但您不能减小实例所需存储空间的大小。您也可以通过适当配置,让实例在空间不足时自动增加存储容量。了解详情

我可以升级和降级 vCPU 吗?

可以。您可以更改实例上使用的 vCPU 数量。您可以根据需要增加或减少核心数量。更改 vCPU 数量通常需要不到五分钟的停机时间。 如果您要增加 Cloud SQL 企业 Plus 版主实例上的 vCPU 数量,则更改将生效,且停机时间接近于零。

我是否需要使用 Google Cloud 控制台来管理 Cloud SQL?
不需要。所有可以使用控制台完成的管理任务,都可以使用 Cloud SQL Admin API 以编程方式完成或者使用 gcloud 命令行工具编写脚本完成。
如何收回临时文件占用的空间?
当 SQL 查询创建多个临时表时,临时文件会增大。如需收回临时表占用的空间,您需要重启数据库。请注意,重启数据库不会减少因临时文件增大而产生的预配磁盘空间。
我可以导入或导出特定数据库吗?
是。您一次只能导入或导出一个特定数据库,不能同时导入或导出多个数据库。如需了解详情,请参阅导入数据导出数据
我可以导入或导出 CSV 文件吗?
您可以导入或导出 MySQL 或 PostgreSQL 的 CSV 文件。如需了解详情,请参阅创建 CSV 文件

Cloud SQL for SQL Server 目前不支持 CSV。

为实例导入或导出数据时需要 Cloud Storage 账号吗?
Cloud SQL 支持使用 CSV 或 pg_dump 文件导入和导出数据库。如需了解详情,请参阅使用 pg_dump 和 pg_restore 导出和导入使用 CSV 文件导出和导入
删除我的实例后,我可以重新使用该实例的名称吗?
可以。
Cloud SQL 提供什么级别的事务隔离?

PostgreSQL 实例:Cloud SQL 提供 Read committed 事务隔离。您可以更改特定事务的事务隔离级别,但通常首选使用默认值。如需了解详情,请参阅 PostgreSQL 文档中的事务隔离

如何保护实例免遭意外删除?
您可以在创建实例时或稍后启用删除保护。如果此设置已启用,您必须先将其停用,然后才能删除实例。请参阅防止删除实例
返回页首

数据分析

为什么我在数据分析中找不到示例查询计划?
由于查询对查询会产生性能影响,因此我们没有用于获取查询计划的示例查询。因此,有时查询示例计划并不会显示。
返回页首

价格和结算

如何试用 Cloud SQL?
db-f1-micro 是规模最小的实例。您可以借助此实例来试用 Cloud SQL 服务。 请注意,服务等级协议 (SLA) 未涵盖共享核心实例。
一个项目中可以创建多少个实例?
如需了解实例限制,请参阅配额和限制
我需要多大规模的数据库实例?需要多少 RAM?
一般来说,选择具有更多 RAM 和 CPU 的较大规模实例可以提升数据库的性能。这种做法能够提升许多涉及大量计算的查询(例如涉及联接、ORDER BY 或 GROUPING 的查询)的性能,但仅涉及到个别行的更新操作的性能不会受到太大影响。 但是,实例的大小越大,操作延迟时间就越长。如需详细了解实例大小和价格,请参阅价格页面
实例使用费用是怎样计算的?

我们按照您的实例处于开启状态的时间对您收取费用(按分钟)。

存储量是怎样计算的?
存储量根据您为实例预配的存储量计算。备份的存储费用按备份占用的空间量计算。无论您的实例处于开启还是关闭状态,都会产生存储费用。
我怎样才能知道需要支付多少费用?
Google Cloud 控制台结算标签页会显示自上次开具账单以来,您的实例产生了多少费用。
当我的实例达到允许的大小上限时,会发生什么情况?
如果您的实例达到配置的存储容量,而您未启用自动存储扩容;或者实例达到了已配置的上限,那么系统会禁止写入数据库,直至您进行存储扩容为止。存储空间扩容不需要重启实例或停机。
为什么我的实例被暂停?
可能是您的 Google Cloud 账号出现了问题。 您可以通过提交结算支持请求来确定您的结算状态。解决结算问题后,实例将在几小时内恢复为可运行状态。 请注意,我们会在 MySQL 实例暂停 90 天后将其删除。
为什么我的实例被删除?
处于暂停状态达到 90 天的实例会被删除。这适用于状态为 SUSPENDED 的实例。已停止但状态为 RUNNABLE 的实例不会被删除。
如何取消 Cloud SQL 账号?
如需为项目停用 Cloud SQL,您可以访问 Google Cloud 控制台,选择相应项目,然后选择 API 服务以打开 API 信息中心。找到 Cloud SQL API,然后针对该 API 点击停用按钮。
如何停用结算功能?
如需停用结算功能,您可以在 Google Cloud 控制台的结算和设置窗格中点击项目对应的停用结算功能按钮。结算功能停用后,Cloud SQL 服务也会随之一起停用。请务必先确定要停用 Cloud SQL 服务,然后再停用结算功能。

停用结算功能后,您会收到最后一笔账单,这是在从结算周期开始到您取消结算这段时间内产生的费用。

返回页首

将 Cloud SQL 与 App Engine 配合使用

我可以从 App Engine 连接到 PostgreSQL 实例吗?
您可以从 App Engine 应用连接到 PostgreSQL 实例,具体取决于您所使用的环境和语言。如需了解详情,请参阅从 App Engine 标准环境连接从 App Engine 柔性环境连接
位于美国的 App Engine 应用可以访问位于欧盟的 Cloud SQL 实例(反之亦然)吗?

如果您要连接到 Cloud SQL 实例,则 App Engine 应用不必位于实例所在的地区。但 Cloud SQL 实例与 App Engine 应用之间的距离越远,与数据库连接时的延迟时间就越长。

哪种 Google Cloud 数据库服务适合我?
这要取决于您的应用的具体要求。Google Cloud 提供了多种用于存储、管理和检索数据的选项。如需了解详情,请参阅 Google Cloud 数据库
使用 App Engine 开发服务器需要安装本地数据库服务器吗?
不需要。在开发服务器上运行时,您可以将 App Engine 配置为使用 Cloud SQL 或本地安装的数据库服务器。
我可以使用哪些语言访问实例?
App Engine 标准环境支持若干种语言,您可以使用这些语言连接到实例。如需了解详情,请参阅从 App Engine 标准环境连接从 App Engine 柔性环境连接

如果您使用的不是 App Engine,那么可以使用具有相关联的连接器或 API 的任何语言。

我可以将 Django 与 Cloud SQL 配合使用吗?
可以。Cloud SQL 与 Django 兼容。请参阅 Django 使用入门
我可以在 Python 查询字符串中使用哪些占位符?
Python 用户只能在参数替换中使用 %s 格式代码。 因此,以下语句无效:cursor.execute('INSERT INTO entries (guestAge) VALUES (%d)', (age))
如何管理连接?

有效地管理数据库连接是数据库应用开发的一个重要方面,包括使用连接池和指数退避算法。如需查看有关如何在各种语言和框架中采用这些技术的示例,请参阅管理数据库连接

若要详细了解实例连接限制,请参阅配额和限制

带有“无效连接 ID”(Invalid connection ID) 消息的 SQLException 表示什么?
它表示相应连接在服务器上不再处于开放状态,客户端会丢弃此连接。 您无需对这些连接调用“close”,因为它们已处于关闭状态。
我可以在 App Engine 外部采用编程方式访问 Cloud SQL 实例吗?
可以。您可以从采用任何受支持语言的外部应用以编程方式访问 Cloud SQL 实例。 请参阅连接概览
返回页首