Cloud SQL for PostgreSQL 错误消息

本页面讨论了 Cloud SQL 中遇到的一些错误消息。

概览

Cloud SQL 中的错误消息有许多来源,并会出现在很多地方。一些错误消息来自数据库引擎本身,一些来自 Cloud SQL 服务,一些来自客户端应用,还有一些是由 Cloud SQL Admin API 调用返回的。

本页面包含 Cloud SQL 中最常见的一些错误。如果您在此找不到所看到的错误代码或消息,则可以在以下位置查找来源参考资料:

如果您找不到有关所看到的错误消息的参考材料,还可以在以下这些其他用户可能有相关经验的位置进行搜索:

操作错误

A | B | C | D | E | F | G | I | L | M | N | O | P | Q | R | S | T | U | W

错误消息 问题排查
用户“XXX”@“XXX”的访问遭拒(使用密码:XXX) 可能存在多种原因,包括:
  • 用户名(或密码)不正确。
  • 用户正在通过 @XXX 以外的网址进行连接。
  • 用户对他们尝试连接到的数据库没有正确的权限。

请尝试以下操作 ...

  • 验证用户名和相应的密码。
  • 检查连接的来源,查看它与用户具有访问权限的网址是否匹配。
  • 在数据库中检查用户的授予权限。
在网络中找不到分配的 IP 范围。 在修改或移除分配的范围后,VPC 对等互连未更新。

您需要修改专用连接。使用以下命令,并务必使用 --force 参数:


gcloud services vpc-peerings update \
--network=VPC_NETWORK \
--ranges=ALLOCATED_RANGES \
--service=servicenetworking.googleapis.com \
--force
错误消息 问题排查
错误请求 此消息可能有多种原因。Illegal Argument 是最常见的一种。在这种情况下,请求使用不正确的参数或参数的无效值。对于许多其他原因,错误消息可能包含有用的提示。

对于 Illegal Argument,请检查请求以确保每个参数都允许使用,并且参数的每个值都是有效的。对于其他所有原因,请检查日志文件,查看是否有更多信息。

错误消息 问题排查
无法修改 CreateConnection 中分配的范围。请使用 UpdateConnection。 在修改或移除分配的范围后,VPC 对等互连未更新。

您需要修改专用连接。使用以下命令,并务必使用 --force 参数:


gcloud services vpc-peerings update \
--network=VPC_NETWORK \
--ranges=ALLOCATED_RANGES \
--service=servicenetworking.googleapis.com \
--force
对等方重置了连接。 如果 Cloud Storage 在特定时间范围内未收到任何数据,则连接会重置。

请尝试改用 pg_dump 进行手动导出。

Constraints/sql.restrictAuthorizedNetworks。 克隆操作被 Authorized Networks 配置阻止。在 Google Cloud Console 的“连接”部分中为公共 IP 地址配置了 Authorized Networks,并且出于安全考虑,不允许克隆。

如果可以,请移除 Cloud SQL 实例中的所有 Authorized Networks 条目。否则,请创建一个副本(它不包含 Authorized Networks 条目)。

错误消息 问题排查
数据库 user 不存在。 gcloud sql connect --user 仅适用于默认的 postgres 用户。

使用默认用户进行连接,然后更改用户。

磁盘已满。 主实例磁盘大小可能在副本创建期间变满。

对主实例进行修改以将其升级为更大的磁盘。

错误消息 问题排查
未能创建子网。 IP 地址范围中没有更多可用的地址。

在分配的 IP 范围中找不到可用块。请为该服务提供商分配新的范围。

分配的 IP 范围中没有更多的可用地址。

请考虑以下可能出现的情况:

  • 专用服务连接所分配 IP 地址范围的大小小于 /24。
  • 专用服务连接所分配 IP 范围的大小对于 Cloud SQL 实例数量而言太小。
  • 您正尝试在 VPC 宿主项目的同一专用服务连接上创建 MySQL 或 SQL Server 和 PostgreSQL 实例。MySQL 和 SQL Server 可以共享相同的服务连接。PostgreSQL 需要自己的服务连接。
  • 您正尝试在不同区域的同一专用服务连接上创建实例,但这样做不受支持。

对于上述每种场景,您可以选择展开现有 IP 范围,也可以选择分配其他 IP 范围给专用服务连接。

如果您要分配新的范围,请注意不要创建与任何现有分配重叠的分配。

创建新的 IP 地址范围后,使用以下命令更新 VPC 对等互连:


gcloud services vpc-peerings update \
--service=servicenetworking.googleapis.com
--ranges=OLD_RESERVED_RANGE_NAME,NEW_RESERVED_RANGE_NAME \
--network=VPC_NETWORK
--project=PROJECT_ID \
--force
    

如果要扩展现有分配,请注意只能扩大分配范围,不能缩减分配范围。例如,如果原始分配是 10.0.10.0/24,则新分配至少为 10.0.10.0/23。

一般来说,如果从 /24 分配开始,对于每个条件(额外的实例类型组、额外的区域),将“/子网掩码位数”递减 1 是一种较好的做法。例如,如果尝试在同一分配中创建两个实例类型组,则从 /24 递减到 /23 就足够了。

扩展现有 IP 地址范围后,使用以下命令更新 VPC 对等互连:


gcloud services vpc-peerings update \
--service=servicenetworking.googleapis.com
--ranges=RESERVED_RANGE_NAME \
--network=VPC_NETWORK \
--project=PROJECT_ID
    
错误消息 问题排查
(gcloud.sql.connect) 您的客户端似乎没有 IPv6 连接,并且数据库实例没有 IPv4 地址。 您正尝试使用 Cloud Shell 连接到您的专用 IP 实例。

目前不支持从 Cloud Shell 连接到仅使用专用 IP 地址的实例。

错误消息 问题排查
InnoDB:写入文件 ./ibtmp1 在偏移 XXXX 处失败,应已写入 YYYY 字节,但仅写入 0 个。 实例在进行自动备份时达到硬性限制。

检查确认您的操作系统和文件系统支持此大小的文件。检查确认磁盘未满,或者磁盘配额未用尽。您可以通过 Google Cloud Console 申请增加配额,也可以对实例进行修改以将其升级为更大的磁盘。

内部错误。 项目可能缺少此功能所需的 Service Networking 服务帐号。

如需修复服务权限,请停用 Service Networking API,等待五分钟,然后重新启用。

请求无效:实例的 Service Networking 配置不正确。 未在项目中启用 Service Networking API

在您的项目中启用 Service Networking API。如果您在尝试为 Cloud SQL 实例分配专用 IP 地址时看到此错误并且您使用共享 VPC,则还需要为宿主项目启用 Service Networking API

错误消息 问题排查
网络关联失败。 未在项目中启用 Service Networking API

在您的项目中启用 Service Networking API。如果您在尝试为 Cloud SQL 实例分配专用 IP 地址时看到此错误并且您使用共享 VPC,则还需要为宿主项目启用 Service Networking API

错误消息 问题排查
操作失败,因为正在进行其他操作。 Cloud SQL 中的大多数操作是同步的。一次只能运行一个。

等待上一个操作完成后,再开始另一个操作。

操作对此实例无效。 此错误从对 instances.restoreBackup 的 API 调用返回,这意味着您无法从备份恢复到存储空间大小 (XX GB) 比备份大小 (YY GB) 小的实例。

对目标实例进行修改以增加其存储空间大小。

错误消息 问题排查
已超出配额。 您已达到每分钟或每日配额的上限。查看 Cloud SQL 的配额和限制

通过 Google Cloud Console 申请增加配额。

错误消息 问题排查
保留剩余的连接槽。 已达到允许的连接数上限。

增加 max_connections 标志的值。请参阅配置数据库标志

请求缺少有效的 API 密钥。 您可能没有有效的服务帐号密钥 JSON 文件,或者该文件可能未存储在预期位置。

验证 GOOGLE_APPLICATION_CREDENTIALS 环境变量中存储的位置包含有效的服务帐号密钥 JSON 文件,并且该变量指向正确的位置。

错误消息 问题排查
SSL 错误:填充无效。 服务器证书错误。

创建新的服务器证书并轮替

发生了系统错误。
  • 用户可能没有所需的所有 Cloud Storage 权限。
  • 数据库表可能不存在。

请尝试以下操作 ...

  • 检查核实您对存储分区至少拥有 WRITER 权限,并且对导出文件至少拥有 READER 权限。如需详细了解如何在 Cloud Storage 中配置访问权限控制,请参阅创建和管理访问权限控制列表
  • 确保表已存在。如果表已存在,请确认您对存储分区拥有正确的权限。
错误消息 问题排查
表定义已更改。 在导出过程中,表发生了更改。

如果在导出操作期间使用以下语句,则转储事务可能会失败:

  • ALTER TABLE
  • CREATE TABLE
  • DROP TABLE
  • RENAME TABLE
  • TRUNCATE TABLE

从转储操作中移除所有这些语句。

临时文件大小超出 temp_file_limit。 对于您的数据库用量,temp_file_limit 标志设置得太低。

增加 temp_file_limit 大小。 请参阅配置数据库标志

(超时)在导出期间。 CSV 和 SQL 格式的导出方式不同。SQL 格式包含整个数据库,可能需要更长时间才能完成。

使用 CSV 格式,并运行多个较小的导出作业,以减小每项操作的规模和长度。

连接数量过多。 max_connections 标志值设置得过高可能会导致此错误。 这也可能是由启用顺序不一致的标志造成的。

降低 max_connections 标志值,或联系客户服务以请求移除标志,后跟 hard drain。这会强制实例在使用新配置(没有标志或设置)的其他主机上重启。

错误消息 问题排查
没有连接权限。 由于在多个级层进行授权,因此可能存在多个原因:
  • 在数据库级层,数据库用户必须存在且其密码一致
  • 在项目级层,用户可能没有正确的 IAM 权限,包括 serviceusage.services.usecloudsql.instances.connect 权限。
  • 在网络级层,如果 Cloud SQL 实例使用公共 IP,则连接的来源 IP 必须在已获授权的网络中。

请尝试以下操作 ...

  • 确保用户存在且其密码一致。
  • Service Usage Consumer 角色分配给用户帐号: 此角色包含 serviceusage.services.use 权限。
  • 如果使用公共 IP,请确保来源 IP 在已获授权的网络中。
错误消息 问题排查
x509:证书对任何名称均无效。 已知问题:Cloud SQL Proxy Dialer 目前与 Go 1.15 不兼容。

在问题获得修复之前,请参阅 GitHub 上的这一讨论,其中包括了解决方法。

未知错误

下表显示了 Unknown Error 可能发生的一些已知情况,并列出了具体补救措施(如适用)。不过,此列表并非完整列表。如果您在表中未找到您的情况,请参阅 Cloud SQL 的公开问题跟踪器。如果您在此处未找到问题,请考虑提交报告或查看其他支持选项

操作 可能的问题 可以尝试的操作
添加用户 如果数据库中已存在用户,当您尝试添加该用户时,可能会发生此错误。 检查以确保该用户不在数据库中。
备份 如果您在自动或手动备份期间看到此错误消息,可能是实例磁盘已满。 如果临时文件大小占用过多空间,您可以重启实例以移除该文件并释放磁盘空间。否则,您可能需要将实例升级为更大的磁盘。
克隆 当所选可用区中的资源不足时,可能会发生这种情况。 请尝试相应区域中的另一个可用区,或者稍后重试。
创建实例
  • 当您尝试重新使用与最近删除的实例相同的名称时,可能会发生这种情况。
  • 还可能是由间歇性连接问题引起的。
  • 日志可能显示项目未启用 Service Networking API。
  • 尝试并行创建多个实例时也会出现此错误。例如,Terraform 脚本可实现此尝试。
  • 另一个原因是特定资源已用尽或已超出配额限制。在日志中查找 Quota 'INTERNAL_FORWARDING_RULES_WITH_TARGET_INSTANCE_PER_NETWORK' exceeded. Limit: 100.0 globally 等条目
  • 如因 IP 范围中没有更多可用的地址,子网创建失败,则会发生此错误。
  • 实例名称在删除大约一周后才能重新使用。
  • 如果是间歇性连接问题,则唯一的补救方法是重试。
  • 为项目启用 Service Networking API
  • 并行实例创建脚本仅会成功创建一个实例。对该脚本进行修改,等到每个实例创建操作完成后再继续执行下一步。
  • 分配新范围
创建副本 日志文件中可能有更具体的错误信息。 Cloud Logging 中查看日志以找到实际错误。

如果错误为 set Service Networking service account as servicenetworking.serviceAgent role on consumer project,请停用 Service Networking API,然后重新启用。此操作会创建继续执行该过程所需的服务帐号。

如果错误为 The instance creation failed due to a permission error with the CMEK key defined,请查看密钥设置和位置

导出 如果您在尝试将数据库导出到 Cloud Storage 存储分区时看到此错误,则可能是带宽问题导致转移失败。 Cloud SQL 实例可能与 Cloud Storage 存储分区位于不同区域。从一个大洲读取数据并将数据写入另一个大洲涉及很多网络用量,可能会导致类似的间歇性问题。
故障转移(自动) 当服务检测到主实例仍保持响应时,自动故障转移操作可能会产生此错误消息。 在这种情况下,您无需执行任何操作。不会发生故障转移,因为不需要。
导入 导入文件可能包含需要超级用户角色的语句。 修改该文件以移除任何需要超级用户角色的语句。

Cloud SQL 还会使用一些第三方二进制文件(例如 mysqld),它们可能会生成未知的错误消息。此类错误是第三方二进制文件的内部错误,不在 Cloud SQL 的范围内。但是,有时可以在 Cloud SQL 日志文件中找到更具体的错误。

有时,错误代码是未知的错误代码。在这种情况下,完整消息可能是 Unknown Error Code