Cloud SQL for MySQL 问题排查

本页面包含以下主题:

备份与恢复

点击表中的链接可查看详细信息:

针对此问题… 可能的原因… 请尝试以下操作…
无法查看当前操作状态。 用户界面仅显示成功或失败。 使用相关数据库命令了解详情。
找不到操作发起者。 用户界面未显示开始操作的人员。 使用审核日志记录查找。
自动备份期间磁盘空间不足。 实例已达到硬盘空间限制。 检查文件系统大小和配额
删除实例后无法执行备份。 实例已删除。 通过导出重新创建,或者在宽限期内与客户服务联系。
自动备份似乎停滞了。 备份时间与数据库大小相关。 如果您确实需要取消该操作,请与客户服务联系
恢复失败。 转储文件可能包含尚不存在的数据库用户。 在恢复之前先创建数据库用户
操作对此实例无效。 目标实例大小小于来源实例大小。 增加目标实例大小
增加保留自动备份的天数。 仅保留 7 个自动备份。 自行管理手动备份
备份失败时发生未知错误。 备份可能已超时。 请查看这些标志
没有有关备份失败的通知。 备份失败不支持通知功能。 使用 REST API 或 gcloud 命令检查备份的状态

无法查看当前操作状态

您无法在 Google Cloud Console 中查看操作状态。

可能的问题

Google Cloud Console 在完成后仅报告成功或失败,不会返回警告。

可以尝试的操作

连接到数据库并运行 SHOW WARNINGS


找不到操作发起者

您想要了解发起按需备份操作的人员。

可能的问题

Google Cloud Console 中的实例操作页面未显示发起操作的人员。

可以尝试的操作

查看日志并按文本进行过滤以查找用户。您可能需要对私密信息使用审核日志。相关日志文件包括:

  • cloudsql.googlapis.com/mysql-general.log
  • cloudsql.googleapis.com/mysql.err
  • 如果启用了 Cloud Audit Logs,则 cloudaudit.googleapis.com/activity 可能也可用。


自动备份期间磁盘空间不足

您看到错误消息 [ERROR] InnoDB: Write to file ./ibtmp1 failed at offset XXXX, YYYY bytes should have been written, only 0 were written.

可能的原因

实例在自动备份期间达到了硬限制。临时文件在备份期间可能超出可用磁盘空间。

可以尝试的操作

检查确认磁盘未满,或者磁盘配额未用尽。您可以手动增加磁盘大小或启用存储空间自动扩容功能。


删除实例后无法执行备份

删除实例后,您无法执行备份。

可能的问题

实例已删除。

可以尝试的操作

  • Cloud SQL 实例清除的宽限期为四天。在此期间,客户服务可以重新创建实例。清除实例后,将无法恢复数据。
  • 如果您已完成导出,则可以创建新实例,然后执行导入以重新创建数据库。导出数据将写入 Cloud Storage,导入数据从此处进行读取。

自动备份停滞

自动备份停滞了数小时,无法取消。

可能的问题

备份可能需要很长时间,具体取决于数据库大小。

可以尝试的操作

如果您确实需要取消该操作,可以要求客户服务对实例执行 force restart


从备份恢复失败

如果 SQL 转储文件中引用的一个或多个用户不存在,恢复操作可能会失败。

可能的问题

在恢复 SQL 转储之前,拥有对象或获得了对转储数据库中的对象权限的所有数据库用户都必须存在。如果不存在,则恢复将无法重新创建具有原始所有权和/或权限的对象。

可以尝试的操作

在从 SQL 转储中恢复之前,先创建数据库用户


操作对此实例无效

HTTP Error 400: This operation isn't valid for this instance 进行 API 调用时看到错误消息 instances.restoreBackup

可能的问题

您无法将备份恢复到存储空间大小 (XX GB) 小于备份大小 (YY GB) 的实例。

可以尝试的操作

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


增加保留自动备份的天数

您想要将自动备份的天数从 7 天增加到 30 天,或更长时间。

可能的问题

系统仅保留 7 个备份。由于保留备份的费用和空间占用,备份会定期进行清除。遗憾的是,这也意味着当前可见的备份是所有可以用于恢复的自动备份。

可以尝试的操作

如需无限期地保留备份,您可以自行创建按需备份,因为它们的删除方式与自动备份不同。按需备份会无限期保留。也就是说,按需备份会一直保留,直到被删除或它们所属的实例被删除为止。由于该类型的备份不会自动删除,因此可能会影响结算。


备份失败时发生未知错误

备份失败,您会看到 Unknown error

可能的问题

创建备份已经超时十分钟。自动备份设置了十分钟的超时时间,备份应在该时间段内完成。

可以尝试的操作

有两个标志会影响备份创建:checkpoint_timeoutcheckpoint_completion_target。在备份开始时,slow 检查点会运行并将 checkpoint_completion_target 乘以 checkpoint_timeout

例如 900 sec * 0.9 sec = 810 sec = 13.5 min。因此会发生超时。在这种情况下,减小 checkpoint_completion_target 的值可以解决该问题。

没有有关备份失败的通知

自动备份失败,但您未收到电子邮件通知。

可能的原因

备份失败不支持通知功能。

如果自动备份失败,Cloud SQL 实例的 Details 页面中将显示 Operation error 消息。

可以尝试的操作

您可以通过 REST APIgcloud 命令查找备份的状态。例如,首先列出实例的备份,然后按 ID 描述特定备份:

gcloud sql --project=PROJECT_ID backups list --instance=INSTANCE_ID
gcloud sql --project=PROJECT_ID backups describe BACKUP-ID --instance=INSTANCE_ID

克隆

点击表中的链接可查看详细信息:

针对此问题… 可能的原因… 请尝试以下操作…
克隆失败并显示 constraints/sql.restrictAuthorizedNetworks 错误。 被已获授权的网络配置阻止。 尝试以下某一选项

克隆失败并显示 constraints/sql.restrictAuthorizedNetworks 错误

克隆失败并显示 constraints/sql.restrictAuthorizedNetworks 错误。

可能的原因

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

可以尝试的操作

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

连接

点击表中的链接可查看详细信息:

针对此问题… 可能的原因… 请尝试以下操作…
Aborted connection 读取数据包时出错或连接已取消。 请参阅可以尝试的操作
Unauthorized to connect 错误。 可能存在多个根本原因 请参阅可以尝试的操作
网络关联失败。 未在项目中启用 Service Networking API 在项目中启用 Service Networking API
Remaining connection slots are reserved 已达到连接数上限。 增加 max_connections 标志
Set Service Networking service account as servicenetworking.serviceAgent role on consumer project Service Networking 服务帐号并未绑定到 servicenetworking.serviceAgent 角色。 将 Service Networking 服务帐号绑定到 servicenetworking.serviceAgent 角色
error x509: certificate is not valid for any names, but wanted to match project-name:db-name 已知问题:Cloud SQL Proxy Dialer 目前与 Go 1.15 不兼容。 在问题获得修复之前,请参阅 GitHub 上的这一讨论,其中包括了解决方法。
在某些操作系统中无法解析证书。 使用来自 mac OS 11.0 (Big Sur) 的 x509 库的客户端可能无法解析 mysql 实例的某些证书。此错误可能会以一般错误的形式呈现给客户端,例如“已取消”。 解决方法是轮替服务器证书重新创建客户端证书
Cannot modify allocated ranges in CreateConnection. Please use UpdateConnection 在修改或移除分配的范围后,VPC 对等互连未更新。 如需了解 VPC 对等互连更新详情,请参阅可以尝试的操作
Allocated IP range not found in network 在修改或移除分配的范围后,VPC 对等互连未更新。 如需了解 VPC 对等互连更新详情,请参阅可以尝试的操作
ERROR: (gcloud.sql.connect) It seems your client does not have ipv6 connectivity and the database instance does not have an ipv4 address. Please request an ipv4 address for this database instance. 您正尝试使用 Cloud Shell 连接到您的专用 IP 实例。 目前不支持从 Cloud Shell 连接到仅使用专用 IP 地址的实例。

已取消连接

您看到错误消息 Got an error reading communication packetsAborted connection xxx to db: DB_NAME

可能的问题

  • 网络不稳定。
  • 没有对 TCP keep-alive 命令的响应(客户端或服务器无响应,可能超载)。
  • 超出了数据库引擎的连接生命周期,服务器终止了该连接。

可以尝试的操作

应用必须能够容忍网络故障并遵循最佳做法,例如连接池和重试。大多数连接池程序会尽可能捕获这些错误。否则,应用必须正常重试或失败。

对于连接重试,我们建议使用以下方法:

  1. 指数退避算法。以指数方式增加每次重试之间的时间间隔。
  2. 另外,增加随机退避时间。
结合使用这些方法有助于减少限制。


没有连接权限

您看到错误消息 Unauthorized to connect

可能的原因

由于在多个级层进行授权,因此可能存在多个原因。

  • 在数据库级层,数据库用户必须存在且其密码必须一致。
  • 在项目级,用户可能缺少正确的 IAM 权限。
  • 在 Cloud SQL 级层,根本原因可能取决于您连接到实例的方式。如果您要通过公共 IP 直接连接到实例,则连接的来源 IP 必须在实例已获授权的网络中。

    默认允许专用 IP 连接,除非您从非 RFC 1918 地址进行连接。非 RFC 1918 客户端地址必须配置为已获授权的网络

    默认情况下,Cloud SQL 不会从 VPC 中获知非 RFC 1918 子网路由。您需要将网络对等互连更新到 Cloud SQL,以导出所有非 RFC 1918 路由。例如:

    gcloud compute networks peerings update cloudsql-mysql-googleapis-com --network=NETWORK --export-subnet-routes-with-public-ip --project=PROJECT
    

    如果您要通过 Cloud SQL Auth 代理进行连接,请确保正确设置了 IAM 权限

  • 在网络级层,如果 Cloud SQL 实例使用公共 IP,则连接的来源 IP 必须在已获授权的网络中。

可以尝试的操作

  • 检查用户名和密码。
  • 检查用户的 IAM 角色和权限。
  • 如果使用公共 IP,请确保来源在已获授权的网络中。

网络关联失败

您看到错误消息 Error: Network association failed due to the following error:在使用方项目中将 Service Networking 服务帐号设置为 servicenetworking.serviceAgent 角色。

可能的问题

未在项目中启用 Service Networking API

可以尝试的操作

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


剩余连接槽已预留

您看到错误消息 FATAL: remaining connection slots are reserved for non-replication superuser connections

可能的问题

已达到连接数上限。

可以尝试的操作

修改 max_connections 标志的值。


在使用方项目中将 Service Networking 服务帐号设置为 servicenetworking.serviceAgent 角色

您看到错误消息 set Service Networking service account as servicenetworking.serviceAgent role on consumer project.

可能的原因

Service Networking 服务帐号并未绑定到 servicenetworking.serviceAgent 角色。

可以尝试的操作

如需缓解此问题,请尝试使用这些 gcloud 命令将 Service Networking 服务帐号绑定到 servicenetworking.serviceAgent 角色。

gcloud beta services identity create --service=servicenetworking.googleapis.com --project=PROJECT_ID
gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:service-PROJECT_NUMBER@service-networking.iam.gserviceaccount.com" --role="roles/servicenetworking.serviceAgent"

错误 x509:证书对任何名称均无效

您看到错误消息 error x509: certificate is not valid for any names, but wanted to match project-name:db-name

可能的问题…

已知问题:Cloud SQL Proxy Dialer 目前与 Go 1.15 不兼容。

可以尝试的操作

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


在某些操作系统中无法解析证书

使用来自 mac OS 11.0 (Big Sur) 的 x509 库时,您可能无法解析 mysql 实例的证书。此错误可能会以一般错误的形式呈现,例如“已取消”。

可以尝试的操作

Bug 已修复,新实例不会遇到此问题。对于遇到此问题的旧实例,请轮替服务器证书重新创建客户端证书


无法修改 CreateConnection 中分配的范围。请使用 UpdateConnection

您看到错误消息 Cannot modify allocated ranges in CreateConnection. Please use UpdateConnectionThe operation "operations/1234" resulted in a failure "Allocated IP range 'xyz' not found in network

可能的问题…

已修改专用服务连接。例如,在某个范围预留又被移除后,专用连接也会被移除。如果您在未先重新创建专用连接的情况下尝试使用其他预留范围建立连接,则会出现第一个错误。如果分配的范围已修改,但 vpc-peerings 未更新,您将会看到第二个错误。

可以尝试的操作

您需要重新创建或更新专用连接。使用以下命令,并务必使用 --force 参数:

gcloud services vpc-peerings update --network=VPC_NETWORK --ranges=ALLOCATED_RANGES --service=servicenetworking.googleapis.com --force

创建实例

点击表中的链接可查看详细信息:

针对此问题… 可能的原因… 请尝试以下操作…
Internal error 缺少 Service Networking 服务帐号。 停用 Service Networking API,然后重新启用
Terraform 实例创建失败。 Terraform 配置错误。 检查并修复 Teraform 配置文件
Terraform 脚本中出现 HTTP Error 409 另一个操作已在进行中。 修复 Terraform 脚本,等待每项操作完成。
Unknown error

Service Networking API 可能未启用。

您尝试创建的实例可能与最近删除的实例同名。

您可能尝试同时创建多个实例。

启用 Service Networking API。

为该实例使用其他名称,或等到实例删除一周后再使用。

连续创建实例。

如果这与您的情况不匹配,请查看其他未知错误消息。

Failed to create subnetwork IP 地址范围中没有更多可用的地址。 分配新范围

内部错误

您看到错误消息 {"ResourceType":"sqladmin.v1beta4.instance", "ResourceErrorCode":"INTERNAL_ERROR","ResourceErrorMessage":null}

可能的原因

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

可以尝试的操作

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


Terraform 实例创建失败

Terraform 实例创建失败。

可能的原因

这通常是 Terraform 脚本本身的问题。

可以尝试的操作

检查并修复 Terraform 配置文件。


Terraform 脚本中出现 409 错误

您在 Terraform 脚本中看到错误消息 HTTP Error 409

可能的原因

Operation failed because another operation was already in progress

可以尝试的操作

对此脚本进行修改以停止执行,直到每项实例操作完成。让脚本轮询并等到针对前一个操作 ID 返回 200,然后再继续下一步。


未知错误

尝试创建实例时,您会看到类似于 Cloud SQL creation failed, error UNKNOWN 的错误消息。

可能的原因

  • 启用的 Service Networking API 可能未启用。
  • 您可能正在尝试重新使用最近删除的实例的名称。实例名称在删除后的一周内不能重新使用。
  • 您可能正在尝试同时创建多个实例。在这种情况下,系统只会创建第一个实例,无法创建剩余实例并显示 Unknown error。一次只能运行一个创建操作。

可以尝试的操作

  • 启用 Service Networking API。
  • 为该实例使用其他名称,或者等待一周,然后使用该名称创建新实例。
  • 连续创建多个实例,而不是同时创建。

未能创建子网

您看到错误消息:Failed to create subnetwork. Couldn't find free blocks in allocated IP ranges. Please allocate new ranges for this service provider.

可能的原因

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

如果在尝试通过专用服务连接,针对共享 VPC 网络使用专用 IP 创建 Cloud SQL 实例时遇到此错误。有五种可能的场景:

  • 专用服务连接所分配 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]

外部主实例

点击表中的链接可查看详细信息:

针对此问题… 可能的原因… 请尝试以下操作…
Specified key was too long; max key length is 767 bytes 外部主实例可以设置变量 innodb_large_prefix 在创建副本时,innodb_large_prefix 标志设置ON,或使用该标志更新现有副本。
Table definition has changed 转储过程中数据定义语言 (DDL) 发生了变化。 在转储过程中避免 DDL 更改
错误消息:Access denied; you need (at least one of) the SUPER privilege(s) for this operation 源数据库中可能有以 Cloud SQL 不支持的方式引用 DEFINER 的视图、函数或过程。 如需了解详情,请参阅 Cloud SQL 中的 DEFINER 用法。
错误消息:ERROR 1045 (28000) at line {line_number}: Access denied for user 'cloudsqlimport'@'localhost DEFINER 存在于源数据库中,但不存在于副本中。 详细了解 Cloud SQL 中的 DEFINER 用法。
Lost connection to MySQL server during query when dumping table 来源可能不可用,或者转储包含的数据包过大。 确保外部主实例可供连接,或将 max_allowed_packet 选项与 mysqldump 结合使用
Got packet bigger than 'max_allowed_packet' bytes when dumping table 数据包超过设置所允许的数据包大小。 max_allowed_packet 选项与 mysqldump 结合使用
初始数据迁移成功,但未复制任何数据。 可能存在有冲突的复制标志。 检查这些标志设置
初始数据迁移成功,但一段时间后数据复制停止工作。 可能存在多个原因。 请尝试按这些建议操作
mysqld check failed: data disk is full 副本实例的数据磁盘已满。 增加副本实例的磁盘大小。您可以手动增加磁盘大小或启用存储空间自动扩容功能。

指定的键过长;键长度上限为 767 字节

您会看到错误 Specified key was too long; max key length is 767 bytes.

可能的问题

外部主实例可以设置变量 innodb_large_prefix。这允许长度超过 767 字节的索引键前缀。MySQL 5.6 的默认值为 OFF

可以尝试的操作

在创建副本时,将 innodb_large_prefix 标志设置为 ON,或使用该标志更新现有副本。


表定义已更改

您会看到错误 Table definition has changed

可能的问题

转储过程中发生了 DDL 更改。

可以尝试的操作

在转储过程中,请勿修改表或执行任何其他 DDL 更改。


访问遭拒;您需要(至少其中一种)SUPER 特权才能执行此操作

您会看到错误 Access denied; you need (at least one of) the SUPER privilege(s) for this operation

可能的问题

根本原因可能是客户的 VIEW/FUNCTION/PROCEDURE 具有使用超级 user@localhost(例如 root@localhost)的 DEFINER。Cloud SQL 不支持此功能。

可以尝试的操作

解决方法是更新外部数据库中的定义器,例如从 root@localhost 更新为 root@% 或非超级用户。如需了解详情,请参阅存储对象访问权限控制


错误 1045 (28000),位于第 xxx 行:用户 'cloudsqlimport'@'localhost 访问被拒绝

您会看到错误 ERROR 1045 (28000) at line xxx: Access denied for user 'cloudsqlimport'@'localhost

可能的原因

源数据库中具有 DEFINER 子句的用户不存在于副本数据库中,而且该用户在源数据库的对象定义中交叉引用。

可以尝试的操作

用户不会与数据一起迁移。在开始复制之前,请在副本数据库中创建源数据库用户。


在查询期间转储表时与 MySQL 服务器的连接中断

您会看到错误 Lost connection to MySQL server during query when dumping table

可能的问题

  • 来源可能无法再从副本进行连接。

  • 源数据库可能包含具有大型 Blob 或长字符串的表,这需要将源数据库的 max_allowed_packet 设置为较大的数字。

可以尝试的操作

  • 重启外部主实例并确保其可供连接。

  • 将 mysqldump 与 max_allowed_packet 选项结合使用,以转储数据并使用转储文件进行迁移。


转储表时获取的数据包超过“max_allowed_packet”字节

您会看到错误 Got packet bigger than 'max_allowed_packet' bytes when dumping table

可能的问题

数据包超过设置所允许的数据包大小。

可以尝试的操作

将 mysqldump 与 max_allowed_packet 选项结合使用,以转储数据并使用转储文件进行迁移。


未复制任何数据。

初始数据迁移成功,但未复制任何数据。

可能的问题

一个可能的根本原因是源数据库已定义了复制标志,导致部分或所有数据库更改没有被复制。

可以尝试的操作

确保没有以冲突的方式设置 binlog-do-dbbinlog-ignore-dbreplicate-do-dbreplicate-ignore-db 等复制标志。

在主实例上运行 show master status 命令以查看当前设置。


初始数据迁移成功,但一段时间后数据复制停止工作

初始数据迁移成功,但一段时间后数据复制停止工作。

可能的问题

导致此问题的根本原因可能有很多。

可以尝试的操作

  • 在 Cloud Monitoring 界面中查看副本实例的复制指标

  • MySQL IO 线程或 SQL 线程中的错误可以在 mysql.err 日志文件的 Cloud Logging 中找到。

  • 在连接到副本实例时,也可能会发现此错误。运行 SHOW SLAVE STATUS 命令,并在输出中检查以下字段:

    • Slave_IO_Running
    • Slave_SQL_Running
    • Last_IO_Error
    • Last_SQL_Error

mysqld 检查失败:数据磁盘已满

您会看到错误 mysqld check failed: data disk is full

可能的问题

如果您在 DRAIN 操作期间遇到此错误,则说明副本实例的数据磁盘已满。

可以尝试的操作

增加副本实例的磁盘大小。

外部副本

点击表中的链接可查看详细信息:

针对此问题… 可能的原因… 请尝试以下操作…
错误消息:The slave is connecting ... master has purged binary logs containing GTIDs that the slave requires 副本不知道从哪里开始读取日志。 使用正确的标志设置创建新的转储文件,并使用该文件配置外部副本。

包含 GTID 的已清除二进制日志

您在 MySQL 中看到错误消息 The slave is connecting ... master has purged binary logs containing GTIDs that the slave requires

可能的原因

主 Cloud SQL 实例具有自动备份和二进制日志,并且启用了时间点恢复,因此它应该具有副本可以捕获的足够的日志。但在这种情况下,虽然存在二进制日志,但副本不知道从哪个行开始读取。

可以尝试的操作

使用正确的标志设置创建一个新的转储文件,并使用该文件配置外部副本。

  1. 通过 Compute Engine 实例连接到您的 mysql 客户端。
  2. 运行 mysqldump 并使用 --master-data=1--flush-privileges 标志。

    重要提示:请勿添加 --set-gtid-purged=OFF 标志

    了解详情

  3. 确保刚创建的转储文件包含 SET @@GLOBAL.GTID_PURGED='...' 行。
  4. 将转储文件上传到 Cloud Storage 存储分区,然后使用转储文件配置副本

标志

点击表中的链接可查看详细信息:

针对此问题… 可能的原因… 请尝试以下操作…
包含字符集 utf8mb4 的数据。 此字符集不受支持。 从数据中过滤掉 utf8mb4 字符串
启用标志使实例崩溃。 max_connections 标志值可能设置得过高。 与客户服务联系,请求移除标志
无法添加 performance_schema 标志。 实例大小太小。 Google Cloud Console 不支持修改此标志。 更新为更大的实例或使用 API 更改该值。
时区不会自动更改。 不支持自动更改时区。 必须手动更改时间。了解详情
Bad syntax for dict arg 复杂的参数值需要特殊处理。 了解详情

包含字符集 utf8mb4 的数据

无法导入包含字符集 utf8mb4 的数据。

可能的原因

字符集 utf8mb4 不受支持(即使文档之前表明支持该字符集)。

可以尝试的操作

从数据中过滤掉 utf8mb4 字符串。


启用标志使实例崩溃

启用标志后,实例会在错误和崩溃之间循环。

可能的原因

如果 max_connections 标志值设置得过高,则会导致此错误。

可以尝试的操作

请与客户服务联系,请求移除标志,然后执行 hard drain。这会强制实例在使用新配置(没有不需要的标志或设置)的其他主机上重启。


无法添加 performance_schema 标志

您无法添加 performance_schema 标志,因为该标志不在受支持标志的下拉菜单中。 您需要使用 API 更改该值。

可能的原因

无法在小于 db-custom-8-30720db-custom-4-26624 的实例上启用 performance_schema 及其变体(performance_schema_accounts_sizeperformance_schema_accounts_size 等)。

可以尝试的操作

确保已启用 performance_schema 标志。

必须使用 API 更改此标志的值。如果启用此标志,则无法将机器更改为不支持此标志的大小;必须先停用此标志。

如果您需要使用此标志,则可能需要修改实例以升级到更大的大小。


时区不会自动更改

时区未根据夏令时自动更改。

可能的原因

Cloud SQL 不支持自动更改时区,必须手动更改,并且要按时区偏移值(而不是按字符串)进行更改。

可以尝试的操作

修改实例以更改 default_time_zone 标志。已命名的区域不受支持。例如:Europe/London 采用 UTC 时区,这是 default_time_zone 标志支持的值 +00:00


dict 参数语法错误

尝试设置标志时,您看到错误消息 Bad syntax for dict arg

可能的原因

与 gcloud 命令搭配使用时,复杂的参数值(例如以英文逗号分隔的列表)需要特殊处理。

可以尝试的操作

使用 gcloud --flags-file 参数,该参数指定的 YAML 或 JSON 文件包含适用于复杂标志值的 --flag:value 字典。

高可用性

点击表中的链接可查看详细信息:

针对此问题… 可能的原因… 请尝试以下操作…
找不到手动故障转移的指标。 只有自动故障转移会纳入指标
CPU 和 RAM 使用率接近 100% 实例机器大小对于负载而言过小。 升级实例机器大小

找不到手动故障转移的指标

您执行了手动故障转移,但在自动故障转移指标的 Metrics Explorer 中找不到相应的条目。

可能的问题

只有自动故障转移会纳入指标。手动启动的故障转移不会纳入指标。

可以尝试的操作


CPU 和 RAM 使用率接近 100%

Cloud SQL 实例资源(CPU 和 RAM)使用率接近 100%,导致高可用性实例发生故障。

可能的问题

实例机器大小对于负载而言过小。

可以尝试的操作

对实例进行修改以升级为更大的机器,从而获得更多 CPU 和内存。

导入

点击表中的链接可查看详细信息:

针对此问题… 可能的原因… 请尝试以下操作…
导入时间太长。 过多的有效连接可能会干扰导入操作。 关闭未使用的连接,或者在开始执行导入操作之前重启 Cloud SQL 实例。
导入失败。 导出的文件可能包含尚不存在的数据库用户。 请先清理发生故障的数据库,然后再重试导入。在导入之前先创建数据库用户
导入时出错:表不存在。 所需的表目前不存在。 在开始导入时停用 FOREIGN_KEY_CHECKS
错误消息:ERROR 1045 (28000) at line {line_number}: Access denied for user 'cloudsqlimport'@'localhost' DEFINER 存在于转储文件中,但不存在于数据库中。 详细了解 Cloud SQL 中的 DEFINER 用法以及可能的解决方法。
错误消息:Unknown table 'COLUMN_STATISTICS' in information_schema 如果您使用 MySQL 8.0 中的 mysqldump 二进制文件转储 MySQL 5.7 数据库中的数据,并将其导入 MySQL 8.0 数据库,则会发生这种情况。 如果您转储 MySQL 5.7 数据库中的数据,并将其导入 MySQL 8.0 数据库,请确保使用 MySQL 5.7 中的 mysqldump 二进制文件。如果您使用的是 MySQL 8.0 中的 mysqldump 二进制文件,则需要添加 --column-statistics=0 标志。

导入时间太长

导入时间太长,阻止了其他操作。

可能的原因

过多的有效连接可能会干扰导入操作。连接会消耗 CPU 和内存,从而限制可用的资源。

可以尝试的操作

关闭未使用的操作。检查 CPU 和内存用量,以确保有大量的可用资源。确保将最多资源用于导入操作的最佳方法是在开始执行操作之前重启实例。重启后,系统会执行以下操作:

  • 关闭所有连接。
  • 结束任何可能正在消耗资源的任务。


导入失败

如果导出的 SQL 转储文件中引用的一个或多个用户不存在,则导入会失败。

可能的原因

在导入 SQL 转储之前,拥有对象或获得了对转储数据库中的对象权限的所有数据库用户都必须存在。如果不存在,则恢复将无法重新创建具有原始所有权和/或权限的对象。

可以尝试的操作

请先清理发生故障的数据库,然后再重试导入。在导入 SQL 转储之前,先创建数据库用户


导入时出错:表不存在

导入操作因表不存在而失败。

可能的原因

表可以与其他表有外键依赖关系,根据操作的顺序,其中一个或多个表可能在导入操作期间还不存在。

可以尝试的操作

在转储文件的开头添加以下行:

  SET FOREIGN_KEY_CHECKS=0;

此外,请在转储文件的末尾添加以下行:

  SET FOREIGN_KEY_CHECKS=1;

这些设置会在导入操作执行期间停用数据完整性检查,并在加载数据后重新激活数据完整性检查。这不会影响数据库中数据的完整性,因为数据在创建转储文件期间已经过验证。


错误消息:ERROR 1045 (28000) at line {line_number}: Access denied for user 'cloudsqlimport'@'localhost'

您会看到错误 ERROR 1045 (28000) at line {line_number}: Access denied for user 'cloudsqlimport'@'localhost'

可能的原因

根本原因是转储文件中具有 DEFINER 子句的用户不存在于数据库中,而且该用户在数据库的对象定义中交叉引用。

可以尝试的操作

如需了解如何在转储文件中使用 DEFINER 子句导入数据库,请参阅文档。您可能需要先在数据库中创建一个或多个用户。


错误消息:information_schema 中的未知表“COLUMN_STATISTICS”

您看到错误消息 Unknown table 'COLUMN_STATISTICS' in information_schema

可能的原因

如果您使用 MySQL 8.0 中的 mysqldump 二进制文件转储 MySQL 5.7 数据库中的数据,并将其导入 MySQL 8.0 数据库,则会发生这种情况。

可以尝试的操作

如果您转储 MySQL 5.7 数据库中的数据,并将其导入 MySQL 8.0 数据库,请确保使用 MySQL 5.7 中的 mysqldump 二进制文件。如果您使用的是 MySQL 8.0 中的 mysqldump 二进制文件,则需要添加 --column-statistics=0 标志。

导出

点击表中的链接可查看详细信息:

针对此问题… 可能的原因… 请尝试以下操作…
无法查看当前操作状态。 用户界面仅显示成功或失败。 使用相关数据库命令了解详情。
在导出过程中出现 408 Error (Timeout) SQL 导出可能需要很长时间,具体取决于数据库大小和导出内容。 使用多个 CSV 导出以减小每项操作的规模
CSV 导出成功,但 SQL 导出失败。 SQL 导出更有可能遇到 Cloud SQL 的兼容性问题。 使用 CSV 导出以仅导出您需要的文件。
导出时间太长。 Cloud SQL 不支持并发同步操作。 使用导出分流。了解详情
Error 1412: Table definition has changed 导出期间表发生了更改。 从转储操作中移除任何表更改语句
连接在导出操作期间关闭。 查询必须在前 7 分钟内生成数据。 手动测试查询。了解详情
导出过程中出现未知错误。 可能存在带宽问题。 确保实例和 Cloud Storage 存储分区位于同一区域
您想要自动执行导出。 Cloud SQL 不提供自动执行导出的方法。 构建您自己的流水线来执行此功能。了解详情
错误消息:Access denied; you need (at least one of) the SUPER privilege(s) for this operation 转储文件中可能有使用 super user@localhost(例如 root@localhost)的事件、视图、函数或过程。Cloud SQL 不支持此功能。 详细了解 Cloud SQL 中的 DEFINER 用法以及可能的解决方法。

无法查看操作状态

您无法查看正在进行的操作的状态。

可能的原因

Google Cloud Console 在完成后仅报告成功或失败,不会返回警告。

可以尝试的操作

连接到数据库并运行 SHOW WARNINGS


导出过程中出现 408 错误(超时)

您在 Cloud SQL 中执行导出作业时看到错误消息 408 Error (Timeout)

可能的原因

CSV 和 SQL 格式的导出方式不同。SQL 格式会导出整个数据库,可能需要较长的时间才能完成。CSV 格式可让您定义要导出的数据库元素。

可以尝试的操作

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


CSV 导出成功,但 SQL 导出失败

CSV 导出成功,但 SQL 导出失败。

可能的原因

CSV 和 SQL 格式的导出方式不同。SQL 格式会导出整个数据库,可能需要较长的时间才能完成。CSV 格式可让您定义要导出的数据库元素。

可以尝试的操作

使用 CSV 导出以仅导出您需要的内容。


导出时间太长

导出时间太长,阻止了其他操作。

可能的原因

Cloud SQL 不支持并发同步操作。

可以尝试的操作

尝试一次导出较小的数据集。


mysqldump:错误 1412:表定义已更改

您看到错误消息 mysqldump: Error 1412: Table definition has changed, retry transaction when dumping the table

可能的原因

在导出过程中,表发生了更改。

可以尝试的操作

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

  • ALTER TABLE
  • CREATE TABLE
  • DROP TABLE
  • RENAME TABLE
  • TRUNCATE TABLE
从转储操作中移除所有这些语句。


连接在导出操作期间关闭

连接在导出操作期间关闭。

可能的原因

与 Cloud Storage 的连接可能超时,因为在导出中运行的查询在导出启动后的 7 分钟内未生成任何数据。

可以尝试的操作

手动测试查询,方法是从任何客户端连接,然后使用以下命令将查询的输出发送到 STDOUT:

COPY (INSERT_YOUR_QUERY_HERE) TO STDOUT WITH ( FORMAT csv, DELIMITER ',', ENCODING 'UTF8', QUOTE '"', ESCAPE '"' )

这是预期行为,因为启动导出后,客户端应立即开始发送数据。在未发送数据情况下保持连接最终会断开连接,最后导致导出失败,使操作处于不确定状态。此外,以下是来自 gcloud 的错误消息:

operation is taking longer than expected


导出过程中出现未知错误

您在尝试将数据库导出到 Cloud Storage 存储分区时看到错误消息 Unknown error

可能的原因

转移可能由于带宽问题失败。

可以尝试的操作

Cloud SQL 实例可能与 Cloud Storage 存储分区位于不同区域。从一个大洲读取数据并将数据写入另一个大洲涉及很多网络用量,可能会导致类似的问题。检查实例和存储分区所在的区域。


想要自动执行导出

您想要自动执行导出。

可能的原因

Cloud SQL 不提供自动执行导出的方法。

可以尝试的操作

您可以使用 Cloud Scheduler、Pub/Sub 和 Cloud Functions 等 Google Cloud 产品构建自己的自动导出系统。


出现 ERROR_RDBMS 系统错误

您看到错误消息 [ERROR_RDBMS] system error occurred

可能的原因

  • 用户可能没有所需的所有 Cloud Storage 权限。
  • 数据库表可能不存在。

可以尝试的操作

  1. 检查核实您对存储分区至少拥有 WRITER 权限,并且对导出文件至少拥有 READER 权限。如需详细了解如何在 Cloud Storage 中配置访问权限控制,请参阅创建和管理访问权限控制列表
  2. 确保表已存在。如果表已存在,请确认您对存储分区拥有正确的权限。

访问遭拒;您需要(至少其中一种)SUPER 特权才能执行此操作

您会看到错误 Access denied; you need (at least one of) the SUPER privilege(s) for this operation

可能的原因

转储文件中可能有使用 super user@localhost(例如 root@localhost)的事件、视图、函数或过程。Cloud SQL 不支持此功能。

可以尝试的操作

如需了解如何使用 DEFINER 子句导入数据库,请参阅此文档

日志记录

点击表中的链接可查看详细信息:

针对此问题… 可能的原因… 请尝试以下操作…
Logging 占用了大量 CPU 和内存。 Logging 需要进行调整。 尝试调整日志记录资源使用情况
未找到审核日志。 用户身份验证。 检查用户角色和权限
在日志中找不到操作信息。 审核日志未启用。 启用审核日志记录
Logging 占用了大量磁盘空间。 重做日志、二进制日志和常规日志会占用磁盘空间。 运行这些命令以获取磁盘使用详情。
日志文件难以读取。 您只想以 json 或文本形式查看日志。 使用 gcloud logging 命令

Logging 占用了大量 CPU 和内存

Logging 占用了大量 CPU 和内存。

可能的问题

Logging 使用情况需要进行调整。

可以尝试的操作

log_statement 标志可以设置为“none”,logging_collector 标志可以设置为“off”。如果仍在进行日志记录,则可能存在其他与日志相关的标志可以调整。您可以修改实例来改动这些标志。


审核日志记录

您为 Cloud SQL 启用了审核日志记录,但在 Cloud Logging 中找不到任何审核日志

可能的问题

只有当操作是经过身份验证的用户进行的 API 调用(用于创建、修改或读取用户创建的数据),或者操作访问配置文件或资源元数据时,才会写入数据访问日志。

可以尝试的操作

检查执行操作的用户的角色和权限。


在日志中找不到操作信息

您想要详细了解某项操作。例如,用户已被删除,但您找不到谁执行了此操作。日志显示操作已开始,但未提供任何更多信息。

可能的问题

您必须为要记录的详细个人身份信息 (PII) 等启用审核日志记录。

可以尝试的操作

在项目中启用审核日志记录


Logging 占用了大量磁盘空间

您想要了解 MySQL 日志文件占用了多少磁盘空间。

可能的原因

有三种类型的日志文件占用磁盘空间:重做日志、常规日志和二进制日志。

可以尝试的操作:

针对每种类型的日志文件运行以下命令以获取详细信息:

SHOW VARIABLES LIKE 'innodb_log_file%';

SELECT ROUND(SUM(LENGTH(argument)/POW(1024,2),2) AS GB from mysql.general_log;

SHOW BINARY LOGS;

日志文件难以读取

您发现很难在日志浏览器中读取日志。

可能的原因

您只想以 JSON 或文本格式在本地下载日志。

可以尝试的操作:

您可以使用 gcloud logging read 命令以及 linux 后处理命令下载日志。

如需下载为 JSON 文件,请运行以下命令:

gcloud logging read "resource.type=cloudsql_database AND logName=projects/PROJECT-ID/logs/cloudsql.googleapis.com%2FLOGFILE-NAME" --format json --project=PROJECT-ID--freshness="1d" > downloaded-log.json

如需下载为 TEXT 文件,请运行以下命令:

gcloud logging read "resource.type=cloudsql_database AND logName=projects/PROJECT-ID/logs/cloudsql.googleapis.com%2FLOGFILE-NAME" --format json --project=PROJECT-ID--freshness="1d"| jq -rnc --stream 'fromstream(1|truncate_stream(inputs)) | .textPayload' > downloaded-log.txt


管理实例

点击表中的链接可查看详细信息:

针对此问题… 可能的原因… 请尝试以下操作…
重启 MySQL 后性能下降。 重启后 InnoDB 缓存为空,因此所有读取操作都需要往返后端才能获取数据 等待所有数据捕获完毕。
崩溃恢复速度缓慢。 可能已累积大型 general_log 管理常规日志记录。了解详情
您想要了解哪些内容占满了存储空间。 大多数为数据库表、二进制日志或临时文件。 如需了解如何查看,请参阅这些提示
查询被阻止。 有一个进程阻止了其他所有进程。 找到并停止阻止了其他所有进程的那个进程。了解详情
您无法手动删除二进制日志。 无法手动删除二进制日志。 系统会自动删除二进制日志及其相关联的自动备份,通常是大约七天后删除。
您想要查找有关临时文件的信息。 临时文件名为 ibtmp1 请尝试使用此数据库查询了解详情。
您想要了解表的大小。 此信息可以在数据库中找到。 请尝试使用这些数据库查询了解详情。
mysqld 收到了信号 11。 由于查询创建的连接过多,实例崩溃。 重构查询以避免这种情况
InnoDB: page_cleaner: 1000ms intended loop took 5215ms. The settings might not be optimal. 页面清理线程无法跟上实例上的更改速率。 对实例进行分片可能会有帮助。
临时存储使自动存储空间增加。 启用了自动存储空间。 重启会删除临时文件,但不会减少存储空间。只有客户服务才能重置实例大小。了解详情
数据被自动删除。 有一个脚本正在某个位置运行并执行此操作。 尝试查找该脚本
无法删除实例。 可能存在多个根本原因 可以采用多个解决方案
实例因临时数据大小较大而停滞。 一次创建的临时表过多。 重启实例,然后尝试使用相关缓解方法
升级过程中出现严重错误。 可能存在多个原因。 日志可能会显示更多信息。您可能需要与客户服务联系,以强制重启。
实例在磁盘空间用尽后重启时停滞。 未启用存储空间自动扩容功能。 启用存储空间自动扩容功能
本地主实例停滞。 不适用 Cloud SQL 客户服务无法帮助处理非 Cloud SQL 实例
重启时关停速度缓慢。 60 秒后未终止的未完成连接可能会导致关停异常。 仅使用持续时间少于 60 秒的连接
Access denied for user 用户身份验证,或者可能是 SSL/TLS 证书已过期。 检查用户和证书状态。
无法删除用户。 有可能是用户拥有数据库中的对象。 您可能需要删除或重新分配对象
无法将专用 IP 地址分配给共享 VPC 中的现有实例。 实例地址在实例创建后与其项目相关联。 创建新的 Cloud SQL 实例来替换现有实例。
某些查询运行速度缓慢。 特定于数据库的问题或网络延迟。 查看相关建议
表明内存不足,但监控图表未显示。 某些 RAM 可能会被内部开销进程占用。 确保实例对您的工作负载拥有足够的开销
恢复已删除的实例。 删除某个实例时,该实例上的所有数据(包括备份)都会永久丢失。 通过导出到 Cloud Storage 防止数据丢失。
ERROR 1142 (42000): ANY command denied to user 'root'@'%' for table .../code>. 用户不具备此操作所需的权限。 登录并运行此处详述的命令。

重启 MySQL 后性能下降

重启后性能下降。

可能的原因

Cloud SQL 允许在 InnoDB 缓冲区池中缓存数据。但是,重启后,此缓存始终为空,并且所有读取操作都需要往返后端才能获取数据。因此,在缓存被填满之前,查询可能比预期慢。

可以尝试的操作

不适用


崩溃恢复速度缓慢

崩溃恢复速度缓慢。

可能的原因

可能已累积大型 general_log

可以尝试的操作

您可以通过阻止累积大型 general_log 来缩短崩溃恢复时间。如果启用了 general_log,请截断表并仅在短时间内启用 general_log

您可以通过连接到数据库并运行以下查询来了解常规日志的大小:SELECT ROUND(SUM(LENGTH(argument)/POW(1024,2)),2) from mysql.general_log;


想要了解哪些内容占满了存储空间

您想要了解哪些内容占满了存储空间。例如,您发现数据库仅使用了 3 GB,但存储空间却显示使用了 14 GB。

可能的原因

表未占用的大多数空间都被二进制日志和/或临时文件占用了。

可以尝试的操作

  • 您可以在 MySQL 命令行界面中使用以下命令检查二进制日志占用的存储空间: SHOW BINARY LOGS;
  • 临时表可能还占用了大量存储空间。要检查临时空间用量,请使用以下命令:SELECT * FROM INFORMATION_SCHEMA.FILES WHERE TABLESPACE_NAME='innodb_temporary'\G
  • 使用以下命令可检查重做日志大小:SHOW VARIABLES LIKE 'innodb_log_file%';
  • 您可以借助以下命令检查 general_log(如果已启用)的大小:SELECT ROUND(SUM(LENGTH(argument)/POW(1024,2)),2) AS GB from mysql.general_log;
  • 如果需要,您可使用 API 截断日志表。如需了解详情,请参阅 instances.truncateLog 参考页面
  • 详细了解如何设置配置慢查询日志。

查询被阻止

查询可能锁定 MySQL 数据库,导致所有后续查询被阻止/超时。

可能的原因

有一个进程阻止了所有其他进程。

可以尝试的操作

连接到数据库并执行以下查询:SHOW PROCESSLIST。列表中的第一项可能是占用锁的项,后续项正在等待获取该锁。

SHOW INNODB STATUS 查询可能也会有帮助。


无法手动删除二进制日志

您发现无法手动删除二进制日志。

可能的原因

无法手动删除二进制日志。

可以尝试的操作

系统会自动删除二进制日志及其相关联的自动备份,通常是大约七天后删除。


想要查找有关临时文件的信息

您想要查找有关临时文件的信息。

可能的原因

名为 ibtmp1 的文件用于存储临时数据。此文件在数据库重启时重置。

可以尝试的操作

如需查找有关临时文件使用情况的信息,请连接到数据库并执行以下查询:

SELECT * FROM INFORMATION_SCHEMA.FILES WHERE TABLESPACE_NAME='innodb_temporary'\G


想要了解表的大小

您想要了解数据库中表的大小。

可能的原因

此信息可以在数据库中找到。

可以尝试的操作

连接到数据库并执行以下查询:

SELECT TABLE_SCHEMA, TABLE_NAME, sum(DATA_LENGTH+INDEX_LENGTH)/pow(1024,2) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA NOT IN ('PERFORMANCE_SCHEMA','INFORMATION_SCHEMA','SYS','MYSQL') GROUP BY TABLE_SCHEMA, TABLE_NAME;


mysqld 收到了信号 11

发生以下错误:

mysqld got signal 11

可能的原因

实例可能因查询创建的连接过多而崩溃。

可以尝试的操作

重构查询,使其不会创建这么多连接。


InnoDB:page_cleaner

服务器一直处于停止状态,并且您看到如下错误:InnoDB: page_cleaner: 1000ms intended loop took 5215ms. The settings might not be optimal

可能的原因

页面清理线程无法跟上实例上的更改速率。页面清理线程每秒扫描缓冲池一次,以将脏页从缓冲池刷入磁盘。您看到的警告表明它有许多脏页要刷入,并且将一批脏页刷入磁盘需要的时间超过了一秒。

可以尝试的操作

如有可能,对实例进行分片。使用多个较小的 Cloud SQL 实例要优于使用一个大型实例。


临时存储使自动存储空间增加

临时表使存储空间用量增加,自动存储空间也增加。

可能的原因

启用了自动存储空间。

可以尝试的操作

重启可以删除临时表,不会减小自动增加的存储空间。


数据被自动删除

您发现数据会定期被自动删除。

可能的原因

很有可能是某个脚本正在您的环境中的某个位置运行。

可以尝试的操作

查看删除时间点前后的日志,看看是否有在信息中心或其他自动化进程中运行的恶意脚本。


无法删除实例

您看到错误消息 ERROR: (gcloud.sql.instances.delete) HTTP Error 409: The instance or operation is not in an appropriate state to handle the request,或者实例可能具有 INSTANCE_RISKY_FLAG_CONFIG 标志状态。

可能的原因

  1. 另一项操作正在进行中。
  2. 只要使用至少一个 beta 标志,就会触发 INSTANCE_RISKY_FLAG_CONFIG 警告。

可以尝试的操作

  1. Cloud SQL 操作不会并发运行。等待其他操作完成。
  2. 移除存在风险的标志设置并重启实例。

系统因临时数据大小较大而停滞

系统因临时数据大小较大而停滞。

可能的原因

系统可以一次创建多个临时表,具体取决于查询和负载。

可以尝试的操作

遗憾的是,除了重启该服务,没有其他任何方法能缩小 ibtmp1 文件。

一种缓解方法是使用 ROW_FORMAT=COMPRESSED 标志创建临时表,这会将临时表存储在临时文件目录下的单表文件表空间中。但是,这样做的缺点是为每个临时表创建和移除单表文件表空间会降低性能。


升级过程中出现严重错误

升级实例上的资源时,您看到错误消息 ERROR_INTERNAL_FATAL

可能的原因

可能存在多个原因。

可以尝试的操作

日志可能会显示更多信息,但在任何情况下都可能需要客户服务来强制重新创建实例。


实例在磁盘空间用尽后重启时停滞

实例在磁盘空间用尽后重启时停滞

可能的原因

未启用存储空间自动扩容功能。

可以尝试的操作

如果实例的存储空间不足,并且未启用存储空间自动扩容功能,则实例将进入离线状态。为避免此问题,您可以对实例进行修改,以启用存储空间自动扩容功能。


本地主实例停滞

您想要知道当本地主实例停滞时,Cloud SQL 客户服务能否提供帮助。

可能的原因

实例不在 Cloud SQL 中。

可以尝试的操作

Cloud SQL 客户服务无法帮助处理非 Cloud SQL 实例。


重启时关停速度缓慢

重启时关停速度缓慢。

可能的原因

实例关停时,任何未在 60 秒内终止的未完成连接都会导致关停异常。

可以尝试的操作

通过仅使用持续时间少于 60 秒的连接,可以避免大多数异常关停,包括来自数据库命令提示符的连接。如果您将这些连接保持打开状态数小时或数天,则关停可能会异常。


用户访问被拒绝

您看到错误消息 Access denied for user 'XXX'@'XXX' (using password: XXX)

可能的原因

可能存在多个根本原因,包括:

  • 用户名(或密码)不正确。
  • 用户正在通过 @XXX 以外的其他网址进行连接。
  • 用户对要尝试连接的数据库没有正确的权限。

可以尝试的操作

  • 验证用户名和相应的密码
  • 检查连接的来源,查看它与用户获得了访问权限的位置是否匹配。
  • 在数据库中检查用户的授予权限。

无法删除用户

您无法删除数据库用户。

可能的原因

用户在数据库中有依赖于该用户的对象。您首先需要删除这些对象或将其重新分配给其他用户。

可以尝试的操作

确定哪些对象依赖于该用户,然后删除这些对象或将其重新分配给其他用户。本文介绍如何查找用户拥有的对象。


无法将专用 IP 地址分配给共享 VPC 中的现有实例

您无法将专用 IP 地址分配给共享 VPC 中的现有实例。

可能的原因

其原因是因为在创建 Cloud SQL 实例后,它会自动关联到租户项目,因此同一项目中的所有 Cloud SQL 实例也会如此。但是,如果创建的实例在共享 VPC 中使用专用 IP,它会关联到与共享 VPC 宿主项目相关的租户项目。

可以尝试的操作

您可以创建一个新的 Cloud SQL 实例来替换现有实例。


某些查询运行速度缓慢

CPU 使用率一直很高。

可能的原因

查询可能会由于多种原因而运行速度缓慢,主要是由于特定数据库方面。可能会涉及 Cloud SQL 的一个原因是当来源(写入或读取)资源和目的地 (Cloud SQL) 资源位于不同区域时发生网络延迟。

可以尝试的操作

请参阅一般性能提示,具体而言:

对于速度缓慢的数据库插入、更新或删除操作,请考虑以下事项:

  • 您可以启用 long_query_time 标志以检查慢速查询的日志。转到项目的日志浏览器页面,然后运行如下查询:
    resource.type="cloudsql_database"
    resource.labels.database_id="INSTANCE-ID"
    log_name="projects/PROJECT-ID/logs/cloudsql.googleapis.com%2Fmysql-slow.log"
        

    您可以以 JSON 或 TEXT 格式下载日志以进行本地处理。

  • 检查写入者和数据库的位置;长距离发送数据会导致延迟。
  • 检查读取者和数据库的位置;相对于写入性能,延迟对读取性能的影响更大
为了缩短延迟时间,建议您在同一区域中查找来源资源和目的地资源。


表明内存不足,但监控图表未显示

实例失败并报告 Out of memory,但控制台或 Cloud Monitoring 图表似乎显示仍然有内存。

可能的原因

除了工作负载以外,其他因素(例如活跃连接和内部开销进程的数量)可能也会影响内存使用量。这些指标不一定会反映在监控图表中。

可以尝试的操作

确保该实例的开销足以满足您的工作负载和一些额外开销。


恢复已删除的实例

无论实例是有意删除还是意外删除,您都无法取消删除。

可能的问题

删除某个实例时,该实例上的所有数据(包括备份)都会永久丢失。

可以尝试的操作

如需保留数据,请在删除实例之前将数据导出到 Cloud Storage

Cloud SQL Admin 角色具有删除实例的权限。为防止意外删除,请仅在需要时授予此角色。


错误 1142 (42000):任何针对表对用户 'root'@'%' 拒绝的命令。

使用 MySQL 5.7,您在创建具有多个选择级层的视图时可能会遇到 ERROR 1142 (42000): ANY command denied to user 'root'@'%' for table ''"

可能的原因

用户不具备此操作所需的权限。

可以尝试的操作

  1. 连接到数据库(例如,使用 Cloud Shell)并以根用户身份登录
  2. 执行 USE mysql;
  3. 执行以下授权:
    GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE ON . TO 'root' WITH GRANT OPTION;
    
  4. 执行 USE 'Database_Name';,其中 Database_Name 是要在其中创建视图的数据库。
  5. 在会话中执行所有创建视图并提交。

复制

点击表中的链接可查看详细信息:

针对此问题… 可能的原因… 请尝试以下操作…
创建时读取副本未开始复制。 可能存在多个根本原因。 查看日志以了解详情
无法创建读取副本 - invalidFlagValue 错误 明确提供或默认提供的其中一个标记无效。 查看标志值和日志以查找更多信息
无法创建读取副本 - 未知错误。 可能存在多个根本原因。 查看日志以了解详情
磁盘已满。 主实例磁盘大小可能在副本创建期间变满。 将主实例升级为更大的磁盘。
副本实例占用的内存过多。 副本可以缓存经常请求的读取操作。 重启副本实例以收回临时内存空间。
已停止复制。 已达到存储空间上限,且未启用存储空间自动扩容功能。 启用存储空间自动扩容功能
复制延迟一直很高。 可能存在多个不同的根本原因 此处罗列了一些可以尝试的操作。

创建时读取副本未开始复制

创建时读取副本未开始复制。

可能的原因

日志文件中可能有更具体的错误信息。

可以尝试的操作

在 Cloud Logging 中查看日志以找到实际错误。


无法创建读取副本 - invalidFlagValue 错误

无法创建读取副本 - invalidFlagValue

可能的原因

请求中的某个标志无效。它既可以是您提供的标志,也可以设置为默认值。

可以尝试的操作

首先,检查 max_connections 标志的值是否大于或等于主实例上的值。

如果 max_connections 标志设置正确,请在 Cloud Logging 中检查日志以找出实际错误。


无法创建读取副本 - 未知错误

无法创建读取副本 - unknown error

可能的原因

日志文件中可能有更具体的错误信息。

可以尝试的操作

在 Cloud Logging 中查看日志以找到实际错误。

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


磁盘已满

UPDATE_DISK_SIZEmysqld: disk is full 错误。

可能的原因

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

可以尝试的操作

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


副本实例占用的内存过多

副本实例占用的内存过多。

可能的原因

副本使用临时内存来缓存经常请求的读取操作,这可能会导致其占用的内存多于主实例。

可以尝试的操作

重启副本实例以收回临时内存空间。


已停止复制

已停止复制。

可能的原因

已达到存储空间上限并且 >automatic storage increase is disabled

可以尝试的操作

对实例进行修改以启用 automatic storage increase


复制延迟一直很高

复制延迟一直很高。

可能的原因

写入负载过高,副本无法处理。当副本上的 SQL 线程无法与 IO 线程保持同步时,会发生复制延迟。某些类型的查询和工作负载会导致指定架构出现暂时性或永久性的高复制延迟。下面列出了复制延迟的部分常见原因:

  • 对副本的查询速度较慢。找到这些查询并进行修复。
  • 所有表都必须具有唯一键/主键。每次更新此类没有唯一键/主键的表都会导致对副本进行全表扫描。
  • 由于大量更新堆积在副本上,因此 DELETE ... WHERE field < 50000000 等查询会导致基于行的复制出现复制延迟。

可以尝试的操作

以下是一些可行的解决方案:

  • 配置并行复制
  • 修改实例以增加副本的大小。
  • 减少数据库的负载。
  • 将表编入索引。
  • 识别并修复速度缓慢的查询。
  • 重新创建副本。