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。

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

Cloud SQL for SQL Server 支持以下版本的 SQL Server:SQL Server 2017 Standard、SQL Server 2017 Enterprise、SQL Server 2017 Express、SQL Server 2017 Web、SQL Server 2019 Standard(默认)、SQL Server 2019 Enterprise、SQL Server 2019 Express 和 SQL Server 2019 Web。

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

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

Cloud SQL 是否支持所有数据库功能?
Cloud SQL 支持 MySQL、PostgreSQL 和 SQL Server 的大多数常用功能。如需查看标准数据库功能与 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 和数据库会使用一些空间来存储系统文件及元数据。
返回页首

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

我的数据存储在何处?

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

什么是可用区?

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

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

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

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

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

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

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

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

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

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 控制台查看所有 Cloud SQL 实例,以及实例是主实例还是读取副本实例。您还可以使用 gcloud CLI 检查实例是主实例还是读取副本实例。如需了解详情,请参阅检查复制状态
Cloud SQL 是否为针对读取副本的请求提供负载均衡?
Cloud SQL 不会自动提供或配置负载均衡。您可以使用连接池,在多个连接端点之间切换,从而在多个读取副本之间分配读取请求。
可以。可以使用身份验证、授权等等;首先,请参阅概览
返回页首

备份与恢复

如何恢复实例?

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

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

备份的费用是多少?

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

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

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

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

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

时间点恢复对性能有何影响?
对于 Cloud SQL for MySQL,时间点恢复要求您启用二进制日志记录功能。这意味着,对数据库的每次更新都会写入独立日志,造成写入性能略微降低。无论二进制日志文件的大小如何,读取操作的性能都不受二进制日志记录功能的影响。
我何时使用外部复制(而非跨区域复制)进行区域故障防护?
外部复制 跨区域复制
由客户自行管理 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 命令行工具编写脚本完成。
如何在删除某个表后收回相应空间?
将某个表从数据库中删除后,如果查看 Google Cloud 控制台,您可能会发现删除该表后释放的空间并未反映在报告的实例已使用的存储空间中。对于运行 MySQL 5.5 的实例,innodb_file_per_table 标志默认设置为 OFF;InnoDB 永远不会缩减其默认表空间。如需收回此配置的空间,请使用规模缩小了的数据库创建一个新实例,或将 innodb_file_per_table 标志的值更改为 ON。如需了解如何更改数据库标志,请参阅配置数据库标志
如何收回临时文件占用的空间?
当 SQL 查询创建多个临时表时,临时文件会增大。如需收回临时表占用的空间,您需要重启数据库。请注意,重启数据库不会减少因临时文件增大而产生的预配磁盘空间。
如何跟踪数据更改?
如需跟踪数据更改,请为实例启用二进制日志记录功能。跟踪数据更改有助于恢复意外丢失的数据。如果数据意外丢失,例如由于执行 DROP DATABASE 命令,您最多可以恢复到发生数据丢失事件之前所处的二进制日志坐标。如需了解详情,请参阅时间点恢复。PostgreSQL 实例尚不支持二进制日志记录功能。
我可以导入或导出特定数据库吗?
可以。对于 MySQL 实例和 SQL Server 实例,您可以导入和导出单个数据库或多个数据库。对于 PostgreSQL 实例,您只能导入或导出特定数据库。
我可以导入或导出 CSV 文件吗?
您可以导入或导出 MySQL 或 PostgreSQL 的 CSV 文件。如需了解详情,请参阅创建 CSV 文件

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

为实例导入或导出数据时需要 Cloud Storage 账号吗?
Cloud SQL 支持使用 Cloud Storage 存储分区导入和导出数据库(例如,压缩或未压缩的 SQL 转储文件)及 CSV 文件。如需使用 Cloud Storage 存储分区导入或导出数据,您需要注册一个 Google Cloud 账号并创建存储分区,或者需要具备访问属于其他账号的 Cloud Storage 存储分区的权限。 如需了解详情,请参阅使用 SQL 转储文件导出和导入使用 pg_dump 和 pg_restore 导出和导入使用 BAK 文件导出和导入使用 CSV 文件导出和导入
在导入操作中,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 文档中的事务隔离

SQL Server 实例:Cloud SQL 提供所有事务隔离级别。因此,支持下列各项:UNCOMMITTEDREAD COMMITTEDREPEATABLE READSNAPSHOTSERIALIZABLE

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

数据分析

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

价格和结算

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

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

SQL Server 实例:Microsoft SQL Server 许可要求对实例上的每个虚拟 CPU 分配核心许可,并且每个实例至少有四个核心。对于 vCPU 数量不到 4 个的实例,将根据这些要求按 4 倍的 SQL Server 许可费率收费。对于 vCPU 数量为 4 个或以上的实例,您需要付费的 SQL Server 许可数与 vCPU 数相等。

存储量是怎样计算的?
存储量根据您为实例预配的存储量计算。备份的存储费用按备份占用的空间量计算。无论您的实例处于开启还是关闭状态,都会产生存储费用。
我怎样才能知道需要支付多少费用?
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 连接到 MySQL 实例吗?
无论 App Engine 应用是在标准环境还是柔性环境中运行,您均可从该应用连接到 MySQL 实例。如需了解详情,请参阅从 App Engine 标准环境连接从 App Engine 柔性环境连接
我可以从 App Engine 连接到 PostgreSQL 实例吗?
您可以从 App Engine 应用连接到 PostgreSQL 实例,具体取决于您所使用的环境和语言。如需了解详情,请参阅从 App Engine 标准环境连接从 App Engine 柔性环境连接
我可以从 App Engine 连接到 SQL Server 实例吗?
您可以从 App Engine 应用连接到 SQL Server 实例,具体取决于您所使用的环境和语言。如需了解详情,请参阅从 App Engine 标准环境连接从 App Engine 柔性环境连接
位于美国的 App Engine 应用可以访问位于欧盟的 Cloud SQL 实例(反之亦然)吗?

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

如果您要连接到 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 的语言。如需查看受支持语言的列表,请参阅《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 实例。 请参阅连接概览
返回页首