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(默认)。次要版本更新一旦发布,就会自动部署,您无需执行进一步操作。如需详细了解更新,请参阅 Cloud SQL 实例维护概览

如需查看实例的当前版本,请转到 Google Cloud Console,然后点击相应的实例名称,以打开实例详情页面。您也可以使用 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 的公告和新闻。
如何报告错误、提出功能请求或咨询问题?
您可以加入我们的 google-cloud-sql-discuss 群组来报告 Bug 以及提出功能需求,还可以前往 Stack Overflow 咨询问题。如需了解其他支持选项,请参阅 Cloud SQL 支持页面。
返回页首

使用入门

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

数据存储和复制

我的数据存储在何处?

PostgreSQL 实例:实例数据存储在实例所在的地区。如果未指定存储位置,则备份将存储地理位置最靠近 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 中的传输加密

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

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

返回页首

备份与恢复

如何恢复实例?

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

备份的费用是多少?

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

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

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

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

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

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

管理您的实例

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

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

请参阅重启期间实例关停多久?

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

重启实例时,大多数实例会关停一到两分钟。 实例关停前,系统会终止所有连接,并且从磁盘中清空当前工作。对于具有大型负载的实例,此过程需要更长时间,可能看起来就像实例卡住了。在这些情况下,实例关停和重启可能需要长达 1 个小时的时间。

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

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

我可以升级和降级 vCPU 吗?

可以,您可以更改实例上使用的 vCPU 数量。您可以根据需要增加或减少核心数量。更改 vCPU 数量通常需要不到五分钟的停机时间。

我是否需要使用 Google Cloud Console 来管理 Cloud SQL?
不需要。所有可以使用控制台完成的管理任务,都可以使用 Cloud SQL Admin API 以编程方式完成或者使用 gcloud 命令行工具编写脚本完成。
如何收回临时文件占用的空间?
当 SQL 查询创建多个临时表时,临时文件会增大。如需收回临时表占用的空间,您需要重启数据库。请注意,重启数据库不会减少因临时文件增大而产生的预配磁盘空间。
我可以导入或导出特定数据库吗?
可以。您一次只能导入或导出一个特定数据库,不能同时导入或导出多个数据库。如需了解详情,请参阅导入数据导出数据
我可以导入或导出 CSV 文件吗?
您可以导入或导出 CSV 文件。如需了解详情,请参阅创建 CSV 文件
为实例导入或导出数据时需要 Cloud Storage 帐号吗?
Cloud SQL 支持使用 Cloud Storage 存储分区导入和导出数据库(压缩或未压缩的 SQL 转储文件)。如需使用 Cloud Storage 存储分区导入或导出数据,您需要注册一个 Google Cloud 帐号并创建存储分区,或者需要具备访问属于其他帐号的 Cloud Storage 存储分区的权限。如需了解详情,请参阅导入数据导出数据
删除我的实例后,我可以重新使用该实例的名称吗?
可以,但不是立即就能使用。此实例名称会在长达一周的时间内处于不可用状态,此时间过后方可重新使用。
什么是 cloudsqladmin 数据库用户?
每个 Cloud SQL 实例都包含一个名为 cloudsqladmin 的数据库用户。如果您执行 SHOW GRANTS FOR cloudsqladmin@localhost 操作,那么或许会注意到此用户。在某些实例中,此用户也会显示在系统用户表中。需要访问实例所含数据的自动化进程(例如,备份实例或者执行导入或导出操作)会使用此用户帐号。
Cloud SQL 提供什么级别的事务隔离?

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

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

价格和结算

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

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

存储量是怎样计算的?
存储量根据您为实例预配的存储量计算。备份的存储费用按备份占用的空间量计算。无论您的实例处于开启还是关闭状态,都会产生存储费用。
我怎样才能知道需要支付多少费用?
Google Cloud Console结算标签页会显示自上次开具帐单以来,您的实例产生了多少费用。
当我的实例达到允许的大小上限时,会发生什么情况?

如果您的实例达到配置的存储容量,而您未启用存储空间自动扩容功能;或者实例达到了已配置的容量上限,那么除非增加存储空间大小,否则您无法再对数据库执行写入操作。存储空间扩容不需要重启实例或停机。

为什么我的实例被暂停?
可能是您的 Google Cloud 帐号出现了问题。 您可以通过提交结算支持请求来确定您的结算状态。解决结算问题后,实例将在几小时内恢复为可运行状态。 请注意,我们会在 MySQL 实例暂停 90 天后将其删除。
为什么我的实例被删除?
我们会删除处于暂停状态达到 90 天的实例。这适用于状态为 SUSPENDED 的实例。已停止但状态为 RUNNABLE 的实例不会被删除。
如何取消 Cloud SQL 帐号?
您可以为某个项目停用 Cloud SQL,方法是:访问 Google Cloud Console,选择相应项目,然后选择 API 服务以打开 API 信息中心。找到 Cloud SQL API,然后针对该 API 点击停用按钮。
如何停用结算功能?
若要停用结算功能,您可以在 Google Cloud Console 的结算和设置窗格中点击项目对应的停用结算功能按钮。结算功能停用后,Cloud SQL 服务也会随之一起停用。请务必先确定要停用 Cloud SQL 服务,然后再停用结算功能。

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

返回页首

将 Cloud SQL 与 App Engine 配合使用

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

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

哪种 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 实例。 请参阅连接概览
返回页首