如何解决连接 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) 修改参数之前,必须检查参数是否能修改。有关更多信息,请参阅更新 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 数据库实例

相关视频

AWS 官方
AWS 官方已更新 1 年前