我收到“Got an error reading communication packets”错误消息。我想解决 Amazon Relational Database Service(Amazon RDS)for MySQL 或 Amazon Aurora MySQL 兼容版数据库实例中的此错误。
简短描述
如果服务器-客户端连接断开、不当关闭或不成功,Amazon RDS 会将 aborted_clients 或 aborted_connects 的状态计数器加一。aborted_clients 参数描述了由于客户端在未正确关闭连接的情况下停止运行而中止的连接数量。aborted_connects 参数描述了尝试连接到 MySQL 服务器的失败次数。
log_error_verbosity 指定了处理用于错误日志的事件的详细程度。如果此参数的值超过 2,则 RDS for MySQL 会将以下信息写入您的错误日志:
[Warning] Aborted connection xxx to db: '<database name>' user: '<user name>' host: '<host IP>' (Got an error reading communication packets)
每当 aborted_clients 或 aborted_connects 指标值的状态计数器加一时,就会触发该警告。Amazon RDS 使用数据库错误日志来检索此信息。有关详细信息,请参阅 MySQL 服务器网站上的通信错误和连接中止。
可能触发连接中止警告的因素包括但不限于:
解决方法
如果您在 RDS for MySQL 或 Aurora MySQL 兼容版中收到连接中止错误,请务必检查 MySQL 参数的值。确定问题的根本原因后,请更新参数并测试新值,同时监控 MySQL 错误日志。
在对 Amazon RDS 连接中止错误进行问题排查时,请考虑以下方法:
- 查看您是否使用了 Amazon RDS 参数组的原定设置值。与连接超时相关的参数的原定设置值可能不适合您的数据库实例。有关更多信息,请参阅为 Amazon RDS for MySQL 配置参数的最佳实践的与连接超时相关的参数部分。
- 为 connect_timeout 设置一个较高的值,看这样做是否有助于减少连接中止错误消息的发生率。此参数指定 MySQL 服务器实例需要等待多久(以秒为单位)方对不良握手做出响应。
- 修改 interactive_timeout 和 wait_timeout。使用连接池(例如 Java)的应用程序必须具有与连接池设置匹配的超时。
- 如果实例必须处理大型查询,请提高 max_allowed_packet 的值。如果某一行包含的数据超过客户端的 max_allowed_packet 值,则会报告错误。如果您使用的是较大的 BLOB 列或长字符串,请提高该值。有关更多信息,请参阅为 Amazon RDS for MySQL 配置参数的最佳实践的 max_allowed_packet 部分。
- 提高 net_write_timeout 和 net_read_timeout 值。 注意:这些值可以设置为与 wait_timeout 相同的值。
- 确保正确关闭 RDS for MySQL 或兼容 Aurora MySQL 的连接。在退出数据库之前,请务必从客户端应用程序调用 mysql_close() 函数。
问题排查提示
如果您仍然收到连接中止错误消息,请按照以下提示尝试排查问题:
sudo tcpdump -vvv --interface eth0 port 3306 -W 10 -C 100
相关信息
如何修改 Amazon RDS 数据库参数组中的值?
为什么 RDS 数据库实例上的数据库连接断开了?
如何在 Aurora Serverless 集群上开启日志,以便查看和下载日志?