MySQL · 答疑解惑 · MySQL 的那些网络超时错误

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云原生数据库 PolarDB 分布式版,标准版 2核8GB
简介: 前言我们在使用/运维 MySQL 过程中,经常会遇到一些网络相关的错误,比如:Aborted connection 134328328 to db: 'test' user: 'root' host: '127.0.0.1' (Got timeout reading communication packets)MySQL 的网络超时相关参数有好几个,这个超时到底是对应哪个参数呢?

前言

我们在使用/运维 MySQL 过程中,经常会遇到一些网络相关的错误,比如:

Aborted connection 134328328 to db: 'test' user: 'root' host: '127.0.0.1' (Got timeout reading communication packets)

MySQL 的网络超时相关参数有好几个,这个超时到底是对应哪个参数呢?

在之前的月报中,我们介绍过 MySQL 的 网络通信模块 ,包括各模块间的关系,数据网络包是如何发送接受的,以及结果集的数据格式,大家可以先回顾下。

这里我们对 mysqld 处理网络包时,遇到的超时异常情况进行分析,希望大家在遇到网络相关的报错时,能更好理解和排查问题。

问题分析

MySQL 是平等网络协议,就是说 client 和 server 之间的网络交互是一来一回的,client 发送完请求后,必须等待 server 响应包回来,才能发下一个请求。
对 mysqld 来说,就是接收网络请求,然后内部处理,将结果集返回给客户端,然后等待下一个请求:

先看下 mysqld server 和网络超时相关的参数有哪些:

  • interactive_timeout
  • wait_timeout
  • net_read_timeout
  • net_write_timeout
  • connect_timeout

在底层实现上,不管是读还是写操作,超时都是通过 poll(&pfd, 1, timeout) 做的,参数之间的区别是针对连接的不同状态。

读超时

wait_timeout 是给读请求用的,在 do_command 开始就做设置:

my_net_set_read_timeout(net, thd->variables.net_wait_timeout);

这个时候,连接是空闲的,等待用户的请求。

等读完用户的请求包后,连接就变成 active 的,在调用 dispatch_command 执行 SQL 前,通过

my_net_set_read_timeout(net, thd->variables.net_read_timeout);

把超时设置回 net_read_timeout,之后在执行 SQL 请求过程中,server 和 client 基本不会有网络交互,所以这个超时基本用不上。

有一个特殊的情况是 LOAD DATA LOCAL FILE 命令,server 在执行过程中,需要和 client 再做网络交互。

interactive_timeout 是给交互模式的客户端使用的,比如我们常用的 mysql client 工具,这个是在认证过程中设置的,逻辑如下:

static void
server_mpvio_update_thd(THD *thd, MPVIO_EXT *mpvio)
{
  thd->client_capabilities= mpvio->client_capabilities;
  thd->max_client_packet_length= mpvio->max_client_packet_length;
  if (mpvio->client_capabilities & CLIENT_INTERACTIVE)
    thd->variables.net_wait_timeout= thd->variables.net_interactive_timeout;
  thd->security_ctx->user= mpvio->auth_info.user_name;
  if (thd->client_capabilities & CLIENT_IGNORE_SPACE)
    thd->variables.sql_mode|= MODE_IGNORE_SPACE;
}

如果客户端的能力位上设置了 CLIENT_INTERACTIVE,会用 interactive_timeout 的值覆盖 wait_timeout 的值。
而一般情况下,我们应用在建立连接时,是不会设置这个能力位的。

写超时
net_write_timeout 对应写超时,在连接认证完成后,server 和 client 交互过程中写超时一真是不变的。

认证超时

connect_timeout 是给连接认证过程用的,读和写都用这个值,认证完成后,读和写分别设置为 net_read_timeoutnet_write_timeout

总结

可以看到和读相关的超时参数是最多的,也比较容易搞混乱。

  1. 如果是认证过程中超时,不管是读还是,都是 connect_timeout;
  2. 对于读网络超时,一般是 wait_timeout/interactive_timeout,基本不会是 net_read_timeout(特例是业务用到 LOAD DATA LOCAL FILE);
  3. 对于写网络超时,都是 net_write_timeout。

在遇到超时情况下,可以根据这些原则判断对那个参数做调整。

比如下面这种情况:

2017-05-15 19:32:41 47930 [Warning] Aborted connection 6 to db: 'unconnected' user: 'root' host: 'localhost' (Got timeout reading communication packets)

很可能需要调整的 wait_timeout/interactive_timeout。

2017-05-15 20:06:27 5063 [Warning] Aborted connection 12 to db: 'test' user: 'root' host: 'localhost' (Got timeout writing communication packets)

需要调整 net_write_timeout

需要注意的是,MySQL 的关于网络的错误,除了超时以外都认为是 error,没有做进一步的细分,比如可能会看到下面这种日志,有可能是客户端异常退出了,也有可能是网络链路异常。

2017-05-15 19:34:57 47930 [Warning] Aborted connection 8 to db: 'unconnected' user: 'root' host: 'localhost' (Got an error reading communication packets)

2017-05-15 20:07:39 5063 [Warning] Aborted connection 13 to db: 'test' user: 'root' host: 'localhost' (Got an error writing communication packets)
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
6天前
|
NoSQL 关系型数据库 MySQL
实时计算 Flink版操作报错之同步MySQL分库分表500张表报连接超时,是什么原因
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
12天前
|
关系型数据库 MySQL 网络安全
Docker部署MySQL,2024网络安全通用流行框架大全
Docker部署MySQL,2024网络安全通用流行框架大全
|
14天前
|
Android开发
Android网络访问超时
Android网络访问超时
16 2
|
14天前
|
安全 关系型数据库 网络安全
rds公共网络/公网访问
RDS公网访问允许用户通过互联网连接云数据库,但默认关闭以确保安全。需手动开启并配置公网IP或域名,使用时需注意安全风险,如设置严格防火墙规则、启用SSL/TLS加密和强化身份验证。公网访问可能产生带宽、IP及附加服务费用。内网访问是更安全、经济的选择,除非特定场景(如使用Linked Server功能)需公网访问。在实施时,应权衡安全、成本和需求。
54 1
|
14天前
|
弹性计算 关系型数据库 网络安全
rds专有网络
RDS专有网络是在云环境中如华为云、阿里云的VPC内部署的数据库服务,提供逻辑隔离、子网划分、安全组控制、内网高速访问、路由控制和网络策略等功能。其优势在于增强安全性、可控性、稳定性和成本效益。适用于企业级应用、混合云、微服务和大数据分析等场景。操作时需注意迁移计划、白名单设置和公网访问配置。
25 1
|
14天前
|
安全 关系型数据库 网络安全
rds经典网络
阿里云RDS经典网络是早期的网络选项,特点是单一平面无严格隔离,简单易用,但安全性较低。默认提供公网IP,可通过安全组进行访问控制。随着发展,阿里云推荐使用更安全的专有网络(VPC)进行迁移,以满足高隔离性和安全性的需求。用户应根据业务需求和安全策略选择合适的网络环境。
13 3
|
14天前
|
存储 移动开发 AndFix
mPaaS常见问题之pushWindow打开url白屏过一会提示网络超时如何解决
mPaaS(移动平台即服务,Mobile Platform as a Service)是阿里巴巴集团提供的一套移动开发解决方案,它包含了一系列移动开发、测试、监控和运营的工具和服务。以下是mPaaS常见问题的汇总,旨在帮助开发者和企业用户解决在使用mPaaS产品过程中遇到的各种挑战
|
14天前
|
弹性计算 安全 关系型数据库
rds网络类型选取
云数据库RDS的网络类型选择包括经典网络、专有网络(VPC)、公共网络和私有网络。推荐使用VPC以实现高安全隔离,私有网络增加安全性且节省公网费用。根据业务需求和安全策略选择,如需内部访问选择同一VPC,外部访问则需公网并配以严格安全措施。最新阿里云RDS建议使用VPC并结合安全组、网络ACL和白名单保障安全,通过CEN实现跨地域通信。
19 7
|
14天前
|
弹性计算 安全 关系型数据库
rds网络配置
阿里云RDS网络配置涉及网络类型(经典网络或VPC)、子网、安全组规则、内网白名单和SSL加密。确保ECS与RDS在同一VPC内,配置相同可用区或对等连接,调整安全组允许ECS访问RDS端口,将ECS内网IP加入RDS白名单,并启用SSL增强安全。配置步骤包括选择网络、设置白名单和更新安全组规则。根据业务需求,还需考虑其他如存储、读写分离和监控设置。
31 6
|
14天前
|
监控 负载均衡 网络协议
TCP重传与超时机制:解锁网络性能之秘
TCP重传与超时机制:解锁网络性能之秘
164 0

相关产品

  • 云数据库 RDS MySQL 版