Aborted connection 1055898 to db: 'xxx' user: 'yyy' host: 'xxx.xxx.xxx.xxx' (Got timeout reading communication packets)

mysql错误日志中,发现大量以下类似信息:(mysql 5.7.18)

[Note] Aborted connection 1055898 to db: ‘xxx‘ user: ‘yyy‘ host: ‘xxx.xxx.xxx.xxx‘ (Got timeout reading communication packets)

这种Aborted connection情况下,mysql会增加aborted_clients状态计数器的值。这也意味着以下几个问题:

(1)客户端正常连接,但是被异常结束(可能是程序没有正常关闭连接)
(2)客户端sleep的时间超过了wait_timeout、或interactive_timeout的值(这会导致连接被mysql强制关闭)
(3)客户端异常终端,或者查询超出max_allowed_packet的值

mysql> show variables like ‘%max_allowed_packet%‘;
+--------------------------+------------+
| Variable_name            | Value      |
+--------------------------+------------+
| max_allowed_packet       | 16777216   |
| slave_max_allowed_packet | 1073741824 |
+--------------------------+------------+

  

当然,也可能是其它原因导致的。坦白讲,异常终端是很难诊断的,也有可能是和网络、防火墙有关。可以从以下几个方面考虑:

1.如果有大量的连接进程处于sleep状态时间较长,也就意味着应用没有正确、及时关闭数据库连接。强烈建议在应用中能恰当地关闭数据库连接,否则就需要依赖mysql的wait_timeout的设置来关闭连接了。

2.建议检查max_allowed_packet的值,确保该值设置的合理,这样客户端就不会接收到"packet too large"消息提示。如果设置不合理,会异常中断连接。

3.建议关注进程的time_wait数量。如果netstat发现有大量的连接处于time_wait状态,表示该建议应用端调整连接关闭问题了。

#               netstat -ano|grep TIME_WAIT
tcp        0      0 xxx.xxx.xxx.xxx:10054       xxx.xxx.xxx.xxx:55586      TIME_WAIT   timewait (32.97/0/0)
tcp        0      0 xxx.xxx.xxx.xxx:10054       xxx.xxx.xxx.xxx:55367      TIME_WAIT   timewait (27.82/0/0)
tcp        0      0 xxx.xxx.xxx.xxx:10054       xxx.xxx.xxx.xxx:55776      TIME_WAIT   timewait (37.09/0/0)
tcp        0      0 xxx.xxx.xxx.xxx:10054       xxx.xxx.xxx.xxx:56505      TIME_WAIT   timewait (54.61/0/0)
tcp        0      0 xxx.xxx.xxx.xxx:10054       xxx.xxx.xxx.xxx:55553      TIME_WAIT   timewait (31.94/0/0)
tcp        0      0 xxx.xxx.xxx.xxx:10054       xxx.xxx.xxx.xxx:56643      TIME_WAIT   timewait (57.73/0/0)
tcp        0      0 xxx.xxx.xxx.xxx:10054       xxx.xxx.xxx.xxx:55221      TIME_WAIT   timewait (23.70/0/0)
tcp        0      0 xxx.xxx.xxx.xxx:10054       xxx.xxx.xxx.xxx:55920      TIME_WAIT   timewait (41.18/0/0)

4.确保事务被正确、及时地提交了。

5.确保应用端没有异常中断连接,比如php如果设置了max_execution_time=5,即使你增加connect_timeout的值也不会有效果。其它编程语言也会有类似的问题。

6.检查DNS配置是否有延迟问题。检查是否同时配置了skip_name_resolve,且使用IP验证主机而不是使用主机名。设置该参数后,使用ip验证主机,而不是使用主机名。使用该参数后,mysql授权表中的host列必须是IP地址或者localhost。

7.如果是percona,可以开启审计日志。

8.增加net_read_timeout、net_write_timeout的值,并观察是否还有该错误发生。net_read_timeout很少会导致出错,除非网络环境非常差。

连接异常终端是因为连接没有被正常。server端不会导致连接abort,除非客户端/服务器端发生了网络问题。但这也是网络导致的,而不是server端的问题。网络问题可以借助工具来查看,比如:tcpdump,netstat -s

回到问题的本身,先看看mysql的参数设置:

mysql> show variables like ‘%timeout%‘;
+-----------------------------+----------+
| Variable_name               | Value    |
+-----------------------------+----------+
| connect_timeout             | 10       |
| interactive_timeout         | 1800     |
| lock_wait_timeout           | 31536000 |
| net_read_timeout            | 30       |
| net_write_timeout           | 60       |
| wait_timeout                | 1800     |
+-----------------------------+----------+
mysql> show global variables like ‘%log_warning%‘;
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_warnings  | 2     |
+---------------+-------+
1 row in set (0.00 sec)

mysql>

如果log_warnings的值大于1,mysql会将类似信息写入错误日志:

[Warning] Aborted connection 305628 to db: ‘db‘ user: ‘dbuser‘ host: ‘hostname‘ (Got an error reading communication packets)
[Warning] Aborted connection 305627 to db: ‘db‘ user: ‘dbuser‘ host: ‘hostname‘ (Got an error reading communication packets)

如果不想在日志中记录这些信息,可以修改一下log_waring的值:

mysql>set @@global log_warning=1;

  

  

  

Aborted connection 1055898 to db: 'xxx' user: 'yyy' host: 'xxx.xxx.xxx.xxx' (Got timeout reading communication packets)

时间: 2024-10-09 11:30:40

Aborted connection 1055898 to db: 'xxx' user: 'yyy' host: 'xxx.xxx.xxx.xxx' (Got timeout reading communication packets)的相关文章

关于Aborted connection告警日志的分析

前言:? 有时候,连接MySQL的会话经常会异常退出,错误日志里会看到"Got an error reading communication packets"类型的告警.本篇文章我们一起来讨论下该错误可能的原因以及如何来规避. 1.状态变量Aborted_clients和Aborted_connects 首先我们来了解下Aborted_clients和Aborted_connects这两个状态变量的含义,当出现会话异常退出时,这两个状态值会有变化.根据官方文档描述,总结如下: 造成Ab

ssh登录 The authenticity of host 192.168.0.xxx can't be established. 的问题

scp免密码登录:Linux基础 - scp免密码登陆进行远程文件同步 执行scp一直是OK的,某天在本地生成了公钥私钥后,scp到某个IP报以下错误 The authenticity of host '192.168.233.137 (192.168.233.137)' can't be established. ECDSA key fingerprint is SHA256:EsqTfeCJ34DnGV66REuRRPhoFwaLuee5wxFgEAZ8b9k. Are you sure y

好记心不如烂笔头,ssh登录 The authenticity of host 192.168.0.xxx can't be established. 的问题

The authenticity of host 'git.coding.net (123.59.85.184)' can't be established.RSA key fingerprint is SHA256:jok3FH7q5LJ6qvE7iPNehBgXRw51ErE77S0Dn+Vg/Ik.Are you sure you want to continue connecting (yes/no)? 用ssh登录一个机器(换过ip地址),提示输入yes后,屏幕不断出现y,只有按ctr

ssh The authenticity of host 192.168.0.xxx can't be established

用ssh登录一个机器(换过ip地址),提示输入yes后,屏幕不断出现y,只有按ctrl + c结束 错误是:The authenticity of host 192.168.0.xxx can't be established. 以前和同事碰到过这个问题,解决了,没有记录,这次又碰到了不知道怎么处理,还好有QQ聊天记录,查找到一下,找到解决方案: 执行ssh -o StrictHostKeyChecking=no 192.168.0.xxx 就OK 网址是: http://blog.ossxp.

10054: An existing connection was forcibly closed by the remote host

现象 打开页面,PHP-CGI退出,Nginx错误日志如下: 2017/08/09 15:13:31 [error] 8140#19268: *1 WSARecv() failed (10054: An existing connection was forcibly closed by the remote host) while reading response header from upstream, client: 127.0.0.1, server: localhost, reque

The authenticity of host 192.168.0.xxx can't be established

启动hadoop 的时候,可能会报错: The authenticity of host 192.168.0.xxx can't be established 解决方案是,在报错的机器上执行如下代码: ssh -o StrictHostKeyChecking=no 192.168.0.xxx The authenticity of host 192.168.0.xxx can't be established

[!] The ‘Pods-项目名XXX' target has frameworks with conflicting names:XXX.framework.

在集成网易 即时通讯IM时报如下错误: [!] The 'Pods-Yepu' target has frameworks with conflicting names: nimsdk.framework. 具体错误如图所示: 原因为:NIMKit依赖于轻量版的NIMSDK_LITE,如果安装NIMKit,就必须要安装NIMSDK_LITE,而安装NIMKit/Full,才会安装NIMSDK,两对相匹配,否则会报上面的错.且Podfile文件中要加#use_frameworks! 文件展示如图:

小胖说事31------iOS 真机编译错误"“XXX”的 iPod" and run "XXX" again, or if "XXX" is still running

在真机上測试时用一会就出现例如以下信息,且应用挂掉. Restore the connection to ""XXX"的 iPod" and run "XXX" again, or if "XXX" is still running, you can attach to it by selecting Debug > Attach to Process > XXX. 这是由于应用程序突然消耗了大量内存,然后再分配调

MySQL令人头疼的Aborted告警案例分析

MySQL关于aborted告警日志的分析 实战 Part1:写在最前 在MySQL的error log中,我们会经常性看到一些各类的Aborted connection错误,本文中会针对这类错误进行一个初步分析,并了解一个问题产生后的基本排查思路和方法.掌握这种方法是至关重要的,而不是出现问题了,去猜,去试.数据库出现问题的时候需要DBA在短时间内快速解决问题,因此一个好与坏的DBA,区别也在于此. Part2:种类 [Warning] Aborted connection 305628 to