如何解决连接 Amazon RDS MySQL 数据库实例时出现的“MySQL server has gone away”错误?

上次更新时间:2019 年 12 月 20 日

我尝试查询正在运行 MySQL 的 Amazon Relational Database Service (Amazon RDS) 数据库实例,然后收到以下错误消息之一:“MySQL server has gone away”或“Lost connection to server during query”。

简要描述

如果服务器超时并关闭连接,您可能收到以下错误之一:

  • CR_SERVER_GONE_ERROR - 客户端无法向服务器发送问题。
  • CR_SERVER_LOST - 客户端在写入服务器时未收到错误,但客户端未获得问题的完整答案 (或任何答案)。

有关更多信息,请参阅 MySQL 文档中的 MySQL server has gone away

解决方法

请参阅以下导致这些错误的原因及相关解决方法:

  • 如果连接空闲时间过长,则可能会从客户端不正确地终止该连接。要解决此问题,请验证应用程序超时短于 MySQL 超时,并确保应用程序关闭空闲连接。
  • 如果连接超时,可以尝试使用自定义参数组增加 wait_timeoutinteractive_timeout 参数的值,从而延长 MySQL 超时时间。有关更多信息,请参阅使用数据库参数组
  • 如果生成错误的查询检索的是大型数据集,请使用自定义参数组增加 max_allowed_packet 大小参数。有关更多信息,请参阅修改数据库参数组中的参数
  • 如果仅在返回大型数据集时才发生错误,则可能是客户端使用了较大的 MTU 值 (9001)。要解决此问题,请减小客户端 TCP/IP MTU 值。有关更改客户端 MTU 值的信息,请参阅配置实例的 MTU
  • 如果任何 init_connect 参数的设置值导致该参数无法处理,则关联的客户端连接可能断开。确保正确处理所有 init_connect 参数。确保用户对引用为 init_connect 参数的任何流程均具有 EXECUTE 权限。
  • 如果所有连接同时中断,则请确认发生此问题时,其他连接仍然正常工作。要解决此问题,请查看 Amazon RDS 事件并检查 MySQL 错误日志,确认 MySQL 数据库实例是否崩溃或发生故障转移。