Got timeout reading communication packets解决方法

2023-05-16

Got timeout reading communication packets解决方法

http://www.th7.cn/db/mysql/201702/225243.shtml

 

[Note] Aborted connection xxxx to db:

问题现象:在tail -f/data/logs/mysql/error.log日志中出现大量的如下信息(web用的是Zabbix,设置连接超时时间为100秒):


' host: 'localhost' (Got timeout reading communication packets)
2017-02-05T15:30:19.272811+08:00 28546 [Note] Aborted connection 28546 to db: 'zabbix' user: 'zabbix' host: 'localhost' (Got timeout reading communication packets)
2017-02-05T15:30:22.388624+08:00 28547 [Note] Aborted connection 28547 to db: 'zabbix' user: 'zabbix' host: 'localhost' (Got timeout reading communication packets)
2017-02-05T15:30:27.119216+08:00 28554 [Note] Aborted connection 28554 to db: 'zabbix' user: 'zabbix' host: 'localhost' (Got timeout reading communication packets)

 


解决办法:
修改[root@lovebuy114 ~]# grep timeout /etc/my.cnf
interactive_timeout = 120
wait_timeout = 120

log_warnings=1 //注意,我这里原来是2。修改成1后,问题现象果然但是已经不存在了。


在命令行中可以这样修改:
mysql>set global log_warning=1;
mysql>set global interactive_timeout = 120;
mysql>set global wait_timeout = 120;


参数简要说明:
1)interactive_timeout:
参数含义:服务器关闭交互式连接前等待活动的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端。
参数默认值:28800秒(8小时)


解决无Notice的办法:
grep timeout /etc/my.cnf innodb_lock_wait_timeout = 60
interactive_timeout = 28800
wait_timeout = 22
grep log_warnings /etc/my.cnflog_warnings=2
From:http://blog.csdn.net/jamesyao008/article/details/45098073


修改后,无效,原因是现在是变成了Notice,不是警告:


tail -f/data/logs/mysql/error.log
2017-02-05T15:38:19.678134+08:00 128 [Note] Aborted connection 128 to db: 'zabbix' user: 'zabbix' host: 'localhost' (Got timeout reading communication packets)
2017-02-05T15:38:22.452504+08:00 131 [Note] Aborted connection 131 to db: 'zabbix' user: 'zabbix' host: 'localhost' (Got timeout reading communication packets)


 

连接、网络类超时

http://www.cnblogs.com/xiaoboluo768/p/6222862.html

共有如下几个:
connect_timeout:默认为10S
wait_timeout:默认是8小时,即28800秒
interactive_timeout:默认是8小时,即28800秒
net_read_timeout:默认是30S
net_write_timeout:默认是60S

 

handshake流程

    在TCP三次握手的基础之上,简历MySQL通讯协议的连接,这个连接建立过程受connect_timeout参数控制
    --------------------TCP established--------------------
    MySQL Server(10.10.20.96)------->Client(10.10.20.51)
    Client(10.10.20.51)------->MySQL Server(10.10.20.96)
    MySQL Server(10.10.20.96)------->Client(10.10.20.51)

--------------------established--------------------

    在MySQL通讯协议建立连接之后,此时客户端连接的超时受wait_timeout和interactive_timeout参数控制
    建立连接后无交互:MySQL server ---wait_timeout--- Client
    建立连接交互后:MySQL server ---interactive_timeout--- Client

    在如果客户端有数据包传输,那么这个数据包的传输超时由net_read_timeout和net_write_timeout参数控制
    -------------------client与server端有数据传输时-------------------
    client ----->MySQL Server(net_read_timeout)
    client <-----MySQL Server(net_write_timeout)

从上面的结果中可以看到,第一个会话中修改global wait_timeout=5之后,新的连接上来,超过5秒没有发送新的数据包,连接就被断开。

 

net_write_timeout
mysql服务端向客户端写(发送)数据时,服务端等待客户端响应的超时时间,当服务端正在写数据到客户端时,net_write_timeout控制何时超时


net_read_timeout
mysql服务端从客户端读取(接收)数据时,服务端等待客户端响应的超时时间,当服务端正在从客户端读取数据时,net_read_timeout控制何时超时


MySQL · 答疑解惑 · MySQL 的那些网络超时错误
http://mysql.taobao.org/monthly/2017/05/04/

阿里云内核月报

前言

我们在使用/运维 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_timeout 和 net_write_timeout。

 


总结

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

如果是认证过程中超时,不管是读还是,都是 connect_timeout;
对于读网络超时,一般是 wait_timeout/interactive_timeout,基本不会是 net_read_timeout(特例是业务用到 LOAD DATA LOCAL FILE);
对于写网络超时,都是 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)




 

 

 

f

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Got timeout reading communication packets解决方法 的相关文章

  • 超时后中止 Rust 中的评估

    我有一个 Rust 函数 不是我写的 它要么以毫秒为单位返回 要么在失败前等待约 10 分钟 我想将对这个函数的调用包装在返回一个Option这是None如果运行时间超过 10 秒 则包含结果 如果运行时间较短 然而 我还没有找到任何方法来
  • PHP cURL 和 SSL 的奇怪超时

    当我尝试访问 Amazon Cloudfront 时 将 cURL 与 PHP 结合使用时遇到奇怪的超时 这似乎会影响所有失效请求 创建发行版等 cURL 要么报告接收到 0 字节 要么报告接收到很少的字节 然后超时 Operation t
  • JavaScript 超时 - 规范 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 这不仅仅是一个问题 它是一个确保Ja
  • node.js 区分发出 http 请求时的错误

    我的node js应用程序正在使用http request到 REST APIhttp army gov launch nukes我需要区分三种可能的情况 Success 服务器回复肯定 我知道我的敌人已经被消灭了 Failure 要么我从
  • Vagrant 超时

    有一些问题让我的流浪汉站起来 拿到箱子就跑vagrant init之后vagrant up命令我收到此消息 Bringing machine default up with virtualbox provider gt default Im
  • KnpSnappyBundle 和 Symfony 3.4:图像和/或 css 导致超时

    我已经在现有的 Symfony 3 4 项目上安装了 KnpSnappyBundle 我已经用 HTML 树枝测试了 PDF 生成器 仅包含文本 没有图像 没有 css 没有 js 它工作正常 然后我使用绝对 URL 添加 到树枝 图像和
  • 是否可以为 Microsoft SQL Server 上的 SQL 查询设置超时?

    我有一个场景 有时用户选择正确的参数并进行需要几分钟或更长时间才能执行的查询 我无法阻止他选择这样的参数组合 这是相当合法的 所以我想在查询上设置超时 请注意 我真的想停止查询执行本身并回滚任何事务 因为否则它会占用大部分服务器资源 如果添
  • TCP Socket无连接超时

    我打开一个 TCP 套接字并将其连接到网络上其他位置的另一个套接字 然后我就可以成功发送和接收数据 我有一个计时器 每秒向套接字发送一些内容 然后 我通过强行断开连接 在本例中拔出以太网电缆 来粗暴地中断连接 我的套接字仍然报告它每秒都在成
  • 什么是http请求期间的连接超时

    我找到了关于 连接超时 的两种解释 当客户端在 timeout 秒内未向服务器发送任何字节时 服务器将关闭套接字连接 它似乎与 HTTP 标头有一些关系 Connection keep alive 如果在此期间未建立套接字连接 则客户端将在
  • Google Guava Cache - 在运行时更改驱逐超时值

    我正在使用以下内容 LoadingCache
  • linux 使用超时(以毫秒为单位)杀死进程

    我想在Linux上指定时间过后强制终止程序 我发现linux中的 timeout util可以在指定时间后杀死程序 但它不接受毫秒 也就是说 timeout TIME PROGRAM 会在 TIME 过去后杀死 PROGRAM 其中 TIM
  • Tkinter:在主循环中调用事件

    如何调用 tkinterevent来自一个单独的对象 我正在寻找类似 wxWidgets 的东西wx CallAfter 例如 如果我创建一个对象 并将我的对象传递给它Tkroot 实例 然后尝试从我的对象调用该根窗口的方法 我的应用程序锁
  • Java:URLConnection合理的超时时间

    默认情况下 URLConnection 的超时时间为 0 无限制 XXXXX 的合理值是多少 URL url URLConnection uCon url openConnection uCon setConnectTimeout XXXX
  • Docker nuget连接超时

    尝试利用官方jetbrains teamcity agentKubernetes 上的图像 我已经设法在 Docker 中运行 Docker 但尝试使用以下命令构建 ASP NET Core 映像docker build命令失败于dotne
  • 如何为Python的mechanize设置超时值?

    如何为Python的mechanize设置超时值 亚历克斯是正确的 mechanize urlopen需要一个timeout争论 因此 只需插入一些浮点型秒数 http docs python org library socket html
  • java中的简单超时

    谁能指导我如何在java中使用简单的超时 基本上在我的项目中我正在执行一条语句br readLine 它正在读取调制解调器的响应 但有时调制解调器没有响应 为此 我想添加一个超时 我正在寻找类似的代码 try String s br rea
  • .NET Web 服务 (asmx) 超时问题

    我正在连接到供应商提供的 Web ASMX 服务并通过线路发送一组数据 当您向项目添加服务引用时 我的第一次尝试遇到了 Visual Studio 默认在 app config 文件中引发的 1 分钟超时 我把它增加到 10 分钟 又是一次
  • web请求超时处理?

    HttpWebRequest request HttpWebRequest WebRequest Create url request Timeout 20000 using WebResponse response request Get
  • 超时 jQuery 效果

    我试图让一个元素淡入 然后在 5000 毫秒内再次淡出 我知道我可以做类似的事情 setTimeout function notice fadeOut 5000 但这只会控制淡出 我会在回调中添加上述内容吗 Update 从 jQuery
  • 如何防止 Internet Explorer 连接超时?

    如果网站处理和加载页面的时间超过 10 秒 Internet Explorer将做一个connection timeout 用户可以通过将注册表中的默认值设置为更高的值来防止这种情况发生 但我真的不能告诉我的任何客户这样做 所以我如何首先防

随机推荐