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

1 分钟阅读
0

我尝试查询正在运行 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 大小参数。有关更多信息,请参阅修改数据库参数组中的参数
    **注意:**对于 Amazon Aurora,您可以修改参数并在集群参数组中设置它们,以应用于整个集群级别。在数据库参数组中对其进行设置适用于仅在实例级别的参数。对于 Amazon Lightsail MySQL 数据库,在使用命令行界面(CLI)修改参数之前,必须检查参数是否能修改。有关更多信息,请参阅 Updating database parameters in Amazon Lightsail。对于 Lightsail 实例或服务器本地 MySQL 数据库或 Amazon Elastic Compute Cloud(Amazon EC2)MySQL,您可以在配置文件中设置参数。您也可以设置全局 xxx,类似于在普通本地 MySQL 环境中设置全局 xxx。
  • 如果仅在返回大型数据集时才发生错误,则可能是客户端使用了较大的 MTU 值(9001)。要解决此问题,请降低客户端 TCP/IP MTU 值。有关更改客户端 MTU 值的信息,请参阅配置实例的 MTU
  • 如果任何 init_connect 参数设置为不允许处理参数的值,则关联的客户端连接可能会失败。确保所有 init_connect 参数都得到正确处理。确保用户对作为 init_connect 参数引用的任何过程都具有 EXECUTE 权限。
  • 如果所有连接同时断开,请确认出现此问题时其他连接仍在运行。要解决此问题,请查看 Amazon RDS 事件并检查 MySQL 错误日志,确认 MySQL 数据库实例是否崩溃或发生失效转移。

相关信息

连接到运行 MySQL 数据库引擎的数据库实例

修改 Amazon RDS 数据库实例