Cloud SQL 常见问题解答

关于

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

对于 Cloud SQL for MySQL,第二代实例支持 MySQL 8.0、5.7(默认)和 5.6;第一代实例支持 MySQL 5.6。Cloud SQL for PostgreSQL 支持 PostgreSQL 9.6、10、11、12(默认)和 13。Cloud SQL for SQL Server 支持 SQL Server 2017 Standard(默认)、SQL Server 2017 Enterprise、SQL Server 2017 Express 和 SQL Server 2017 Web。次要版本更新一旦发布,就会自动部署,您无需执行进一步操作。如需详细了解更新,请参阅 Cloud SQL 实例维护概览

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

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

使用入门

哪种 MySQL 工具最适合用于管理实例?
有多种 MySQL 工具可用于 Cloud SQL。如需执行单个语句,您可以使用 MySQL 命令行工具。如需执行更复杂的任务或使用更丰富的数据库开发环境,您可以尝试使用 Toad for MySQLMySQL Workbench。如需了解详情,请参阅管理和报告工具
我使用什么存储引擎?
MySQL 实例仅支持一种存储引擎:InnoDB。

如果 mysqldump 文件中的所有表均采用 MyISAM 格式,您可以使用 sed 脚本处理一遍该文件,从而将这些表转换为 InnoDB 格式:

mysqldump --databases [DATABASE_NAME] \
-h [INSTANCE_IP] -u [USERNAME] -p [PASSWORD] \
--hex-blob --default-character-set=utf8mb4 | sed 's/ENGINE=MyISAM/ENGINE=InnoDB/g' > [DATABASE_FILE].sql

警告:如果您的 mysqldump 文件包含 mysql 架构,请勿执行此操作。此类文件必须保留 MyISAM 格式。

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

数据存储和复制

我的数据存储在何处?

MySQL 实例:实例数据存储在实例所在的区域。默认情况下,Cloud SQL 会将备份数据存储在两个区域以实现冗余。一个地区可以是实例所在的地区。另一个地区则应不同。如果一个大洲有两个地区,则备份数据保留在同一大洲。由于澳大利亚只有一个区域,因此悉尼区域的备份数据会存储到亚洲的某个区域, 圣保罗地区的备份数据会存储在美国的某个位置。

PostgreSQL 实例:实例数据存储在实例所在的地区。默认情况下,Cloud SQL 会将备份数据存储在两个地区以实现冗余。一个地区可以是实例所在的地区。另一个地区则应不同。如果一个大洲有两个地区,则备份数据保留在同一大洲。由于澳大利亚只有一个区域,因此悉尼区域的备份数据会存储到亚洲的某个区域, 圣保罗区域的备份数据会存储在美国的某个位置。

什么是地区?

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

对于 MySQL 实例,您可以为实例配置高可用性,从而实现跨地区的容错能力。我们强烈建议您为所有生产实例配置高可用性。

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

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

MySQL 实例:MySQL 实例提供高可用性配置和 MySQL 读取副本。MySQL 只读副本使用异步复制功能

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

Cloud SQL 故障转移的工作原理是什么?

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

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

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

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

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

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

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

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

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

如何判断某一实例是否为读取副本?
您可以使用 Google Cloud Console 查看所有 Cloud SQL 实例,以及实例是主实例还是读取副本实例。您还可以使用 Cloud SDK 检查实例是主实例还是读取副本实例。如需了解详情,请参阅检查复制状态
Cloud SQL 是否为针对读取副本的请求提供负载平衡?
Cloud SQL 不会自动提供或配置负载平衡。您可以使用连接池,在多个连接端点之间切换,从而在多个读取副本之间分配读取请求。
返回页首

备份与恢复

如何恢复实例?

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

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

备份的费用是多少?

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

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

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

自动备份每天进行一次,并且会保留七天。七天后,系统会删除最早的备份。自动备份采用增量方式。这些备份仅包含自上次备份以来发生了更改的数据。最早备份的大小与数据库的大小相似。删除最早的备份后,下一个最早备份的大小将会增加,因此仍然存在完整备份。

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

时间点恢复对性能有何影响?
时间点恢复要求启用二进制日志记录功能。这意味着,对数据库的每次更新都会写入独立日志,造成写入性能略微降低。无论二进制日志文件的大小如何,读取操作的性能都不受二进制日志记录功能的影响。
返回页首

管理您的实例

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

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

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

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

我可以升级和降级 vCPU 吗?

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

我是否需要使用 Google Cloud Console 来管理 Cloud SQL?
不需要。所有可以使用控制台完成的管理任务,都可以使用 Cloud SQL Admin API 以编程方式完成或者使用 gcloud 命令行工具编写脚本完成。
如何在删除某个表后收回相应空间?
将某个表从数据库中删除后,如果查看 Google Cloud Console,您可能会发现删除该表后所释放的空间并未反映在实例报告的所用存储空间中。对于运行 MySQL 5.5 的实例,innodb_file_per_table 标志默认设置为 OFF;InnoDB 永远不会缩减其默认表空间。如需收回此配置的空间,请使用规模缩小了的数据库创建一个新实例,或将 innodb_file_per_table 标志的值更改为 ON。如需了解如何更改数据库标志,请参阅配置数据库标志
如何收回临时文件占用的空间?
当 SQL 查询创建多个临时表时,临时文件会增大。如需收回临时表占用的空间,您需要重启数据库。请注意,重启数据库不会减少因临时文件增大而产生的预配磁盘空间。
如何跟踪数据更改?
如需跟踪数据更改,请为实例启用二进制日志记录功能。跟踪数据更改有助于恢复意外丢失的数据。如果数据意外丢失,例如由于执行 DROP DATABASE 命令,您最多可以恢复到发生数据丢失事件之前所处的二进制日志坐标。如需了解详情,请参阅时间点恢复。PostgreSQL 实例尚不支持时间点恢复和二进制日志记录功能。
我可以导入或导出特定数据库吗?
可以。对于 MySQL 实例,您可以导入和导出单个数据库或多个数据库。对于 PostgreSQL 实例,您只能导入或导出特定数据库。
我可以导入或导出 CSV 文件吗?
为实例导入或导出数据时需要 Cloud Storage 帐号吗?
Cloud SQL 支持使用 Cloud Storage 存储分区导入和导出数据库(压缩或未压缩的 SQL 转储文件)及 CSV 文件。如需使用 Cloud Storage 存储分区导入或导出数据,您需要注册一个 Google Cloud 帐号并创建存储分区,或者需要具备访问属于其他帐号的 Cloud Storage 存储分区的权限。如需了解详情,请参阅导入数据导出数据
在导入操作中,ERROR_RDBMS 表示什么?
如果 MySQL 在数据导入操作期间返回错误,则会发生这种情况。常见原因如下:语法无效;使用的数据库或表尚未定义;尝试运行的 MySQL 语句需要 SUPER 权限。
删除我的实例后,我可以重新使用该实例的名称吗?
可以,但不是立即就能使用。此实例名称会在长达一周的时间内处于不可用状态,此时间过后方可重新使用。
什么是 cloudsqladmin 数据库用户?
每个 Cloud SQL 实例都包含一个名为 cloudsqladmin 的数据库用户。如果您执行 SHOW GRANTS FOR cloudsqladmin@localhost 操作,那么或许会注意到此用户。在某些实例中,此用户也会显示在系统用户表中。需要访问实例所含数据的自动化进程(例如,备份实例或者执行导入或导出操作)会使用此用户帐号。
我该如何使用 GRANT ALL
Cloud SQL 不支持 SUPER 权限,这意味着 GRANT ALL PRIVILEGES 语句将不起作用。作为替代方案,您可以使用 GRANT ALL ON `%`.*
如何访问实例的事务日志?
对于 MySQL 实例,如果您为实例启用了二进制日志记录功能(请参阅启用二进制日志记录功能),并为实例配置了 IP 地址(请参阅为 IP 连接配置访问权限),则可以使用标准 MySQL mysqlbinlog 实用程序检查实例的事务日志。
Cloud SQL 提供什么级别的事务隔离?

MySQL 实例:Cloud SQL 提供 REPEATABLE READ 事务隔离。您可以更改当前会话的事务隔离级别,但通常首选默认值。如需了解详情,请参阅 MySQL 文档中的事务隔离级别

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

返回页首

价格和结算

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

MySQL 和 PostgreSQL 实例:我们按实例处于开启状态的分钟数收取费用。

存储量是怎样计算的?

MySQL 和 PostgreSQL 实例:存储量根据您为实例预配的存储量计算。备份的存储费用按备份占用的空间量计算。无论您的实例处于开启还是关闭状态,都会产生存储费用。

我怎样才能知道需要支付多少费用?
Google Cloud Console结算标签页会显示自上次开具帐单以来,您的实例产生了多少费用。
当我的实例达到允许的大小上限时,会发生什么情况?

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

为什么我的实例被暂停?
可能是您的 Google Cloud 帐号出现了问题。 您可以通过提交结算支持请求来确定您的结算状态。解决结算问题后,实例将在几小时内恢复为可运行状态。 请注意,我们会在 MySQL 实例暂停 90 天后将其删除。
为什么我的实例被删除?
我们会删除处于暂停状态达到 90 天的 PostgreSQL 和 MySQL 实例。这适用于状态为 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 连接到 MySQL 实例吗?
无论 App Engine 应用是在标准环境还是柔性环境中运行,您均可从该应用连接到 MySQL 实例。如需了解详情,请参阅从 App Engine 标准环境连接从 App Engine 柔性环境连接
我可以从 App Engine 连接到 PostgreSQL 实例吗?
您可以从 App Engine 应用连接到 PostgreSQL 实例,具体取决于您所使用的环境和语言。如需了解详情,请参阅从 App Engine 标准环境连接从 App Engine 柔性环境连接
位于美国的 App Engine 可以访问位于欧盟的 Cloud SQL 实例(反之亦然)吗?

如果您要连接到 MySQL 实例,则 App Engine 应用不必位于实例所在的区域,而且可以在标准环境或柔性环境中运行。但是,Cloud SQL 实例与 App Engine 应用之间的距离越远,与数据库连接时的延迟时间就越长。

如果您要从 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 的语言。如需查看受支持语言的列表,请参阅《MySQL 参考手册》中的连接器和 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 实例。 请参阅从外部应用连接
返回页首