我使用的是 Amazon Relational Database Service (Amazon RDS) for MySQL 或 Amazon Aurora MySQL 兼容版数据库实例。我收到“Got an error reading communication packets”(读取通信数据包时出错)错误。
简短描述
您收到以下错误消息:“[Warning] Aborted connection abc to db: 'database name' user: 'user name' host: 'host IP' (Got an error reading communication packets)”。
当 aborted_clients 或 aborted_connects 参数值增加时,您会收到前面的错误消息。当客户端死机且未关闭连接或连接断开时,Amazon RDS 会取消连接并增加 aborted_clients 参数的状态计数器。当客户端无法连接到 MySQL 服务器时,aborted_connects 参数值会增加。
如果 log_error_verbosity 的值超过 2,则您还会收到错误消息。log_error_verbosity 参数指定了管理错误日志事件的详细程度。有关详细信息,请参阅 MySQL 网站上的 Communication errors and aborted connections(通信错误和中断的连接)。
以下因素可能会导致“Got an error reading communication packets”错误消息:
- 客户端或驱动程序不兼容。
- 可关闭任何空闲连接或阻止连接的防火墙或代理。
- 客户端与服务器的连接不当关闭,导致 Amazon RDS for MySQL 内部的休眠连接数较高。
- 不当终止连接的客户端应用程序。
**注意:**MySQL 会强制关闭长时间运行的空闲连接。
- 超过 wait_timeout 或 interactive_timeout 阈值的空闲连接。
- 获取连接数据包时超过 connect_timeout 秒数阈值的客户端连接。
- net_write_timeout 和 net_read_timeout 等参数的值过低。
- 超过了 max_allowed_packet 参数值。
**注意:**当值过小或查询需要的内存超过您为 Amazon RDS for MySQL 分配的内存时,就会出现问题。
解决方法
修改超时参数
要确定导致问题的原因,请查看与连接超时相关的参数。如果您使用参数组的默认值,请更改数据库实例的默认连接超时值。
要更改连接参数,请完成以下步骤:
- 打开 Amazon RDS 控制台。
- 在导航窗格中,选择 Parameter groups(参数组)。
- 为您的数据库实例选择参数组。
- 选择 Edit(编辑)。
- 搜索连接超时参数,然后更改该值。
**注意:**更改值后,在测试新值时监控 MySQL 错误日志。
connect_timeout
为 connect_timeout 设置更高的值,以测试该值是否会减少此问题的发生。connect_timeout 参数定义了 MySQL 服务器数据库实例在数据库实例以错误的握手响应之前必须等待的秒数。有关详细信息,请参阅 MySQL 网站上的 connect_timeout。
interactive_timeout 和 wait_timeout
您还可以修改 interactive_timeout 和 wait_timeout。有关这些参数的详细信息,请参阅 MySQL 网站上的 wait_timeout 或 interactive_timeout。使用连接池的应用程序(如 Java)的超时时间必须与连接池设置相匹配。
max_allowed_packet
如果实例需要处理大型查询、大型二进制大对象 (BLOB) 列或长字符串,请增加 max_allowed_packet 的值。如果某行的数据多于 max_allowed_packet 值,则会出现错误。有关详细信息,请参阅 MySQL 网站上的 max_allowed_packet。
net_write_timeout 和 net_read_timeout
增加 net_write_timeout 和 net_read_timeout 值。您可以将 net_write_timeout 和 net_read_timeout 设置为与 wait_timeout 相同的值。有关详细信息,请参阅 MySQL 网站上的 net_write_timeout 和 net_read_timeout。
从客户端应用程序调用 mysql_close() 函数,以确保与 Amazon RDS for MySQL 或 Aurora MySQL 兼容的连接正确关闭。
使用其他故障排除方法
如果您仍然收到“Got an error reading communications packets”错误消息,请执行以下任一操作:
相关信息
为什么 Amazon RDS 数据库实例上的数据库连接断开了?
如何查看并下载 Aurora Serverless 数据库集群的日志?