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

发布时间 - 2026-01-11 02:06:33    点击率:

本文主要给大家介绍的是关于MySQL中Aborted告警的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍:

实战

Part1:写在最前

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

Part2:种类

[Warning] Aborted connection 305628 to db: 'db' user: 'dbuser' host: 'hostname' (Got an error reading communication packets)
[Warning] Aborted connection 81 to db:'unconnected' user: 'root' host: '127.0.0.1' (Got timeout reading communication
packets)
[Warning] Aborted connection 109 to db:'helei1' user: 'sys_admin' host: '192.168.1.1' (Got an error writing communication packets)
[Warning] Access denied for user 'root'@'127.0.0.1' (using password: YES)
[Warning] Got an error writing communication packets

Part3:重点参数分析

wait_timeout

Command-Line Format --wait-timeout=#
System Variable Name wait_timeout
Variable Scope Global, Session
Dynamic Variable Yes
Permitted Values (Windows) Type integer
Default 28800
Min Value 1
Max Value 2147483
Permitted Values (Other) Type integer
Default 28800
Min Value 1
Max Value 31536000

这个参数指的是数据库系统在关闭它之前,服务器等待非交互式连接上的活动的秒数。

interactive_timeout

Command-Line Format --interactive-timeout=#
System Variable Name interactive_timeout
Variable Scope Global, Session
Dynamic Variable Yes
Permitted Values Type integer
Default 28800
Min Value 1

这个参数指的是在关闭交互式连接之前,服务器等待活动的秒数

Warning:警告这两个参数建议一起调节,能够避免一些坑。

本文的两个参数值采用的是默认值

mysql> show global variables like '%timeout%';
+----------------------------+----------+
| Variable_name    | Value |
+----------------------------+----------+
| connect_timeout   | 10  |
| delayed_insert_timeout  | 300  |
| innodb_lock_wait_timeout | 50  |
| innodb_rollback_on_timeout | OFF  |
|interactive_timeout  | 28800 |
| lock_wait_timeout   | 31536000 |
| net_read_timeout   | 30  |
| net_write_timeout   | 60  |
| slave_net_timeout   | 3600  |
|wait_timeout    | 28800 |
+----------------------------+----------+
10 rows in set (0.01 sec)

另外在数据库中,我们重点关注下这两个参数,看看什么情况下Aborted_clients会提升,什么情况下Aborted_connects 会提升

mysql>show global status like 'aborted%';
+------------------+-------+
|Variable_name | Value |
+------------------+-------+
|Aborted_clients | 19 |
|Aborted_connects | 0  |
+------------------+-------+
2 rows inset (0.00 sec)

Part4:案例1

这里我故意输入错误的密码5次,来看下数据库的error log和Aborted的哪个参数记载了这一问题

[root@HE3~]# mysql -uroot -pwrongpass -h127.0.0.1
ERROR 1045 (28000): Access denied for user 'root'@'127.0.0.1' (using password: YES)
[root@HE3~]# mysql -uroot -pwrongpass -h127.0.0.1
ERROR 1045 (28000): Access denied for user 'root'@'127.0.0.1' (using password: YES)
[root@HE3~]# mysql -uroot -pwrongpass -h127.0.0.1
ERROR 1045 (28000): Access denied for user 'root'@'127.0.0.1' (using password: YES)
[root@HE3~]# mysql -uroot -pwrongpass -h127.0.0.1
ERROR 1045 (28000): Access denied for user 'root'@'127.0.0.1' (using password: YES)
[root@HE3~]# mysql -uroot -pwrongpass -h127.0.0.1
ERROR 1045 (28000): Access denied for user 'root'@'127.0.0.1' (using password: YES)

可以看出,这里的Aborted_connects 记录了密码错误的这一问题

mysql>show global status like 'aborted%';
+------------------+-------+
|Variable_name | Value |
+------------------+-------+
|Aborted_clients | 19 |
|Aborted_connects | 5  |
+------------------+-------+
2 rows inset (0.00 sec)

error log中,也记载了这类密码输错的信息

[Warning] Access denied for user'root'@'127.0.0.1' (using password: YES)
[Warning] Access denied for user 'root'@'127.0.0.1' (using password:YES)
[Warning] Access denied for user 'root'@'127.0.0.1' (using password:YES)
[Warning] Access denied for user 'root'@'127.0.0.1' (using password:YES)
[Warning] Access denied for user 'root'@'127.0.0.1' (using password:YES)

Part5:案例2

接下来我们看下文章第三节提到的两个重点参数对数据库连接的行为影响

这里我们将这两个参数均配置为10秒

mysql>set global wait_timeout=10;
Query OK,0 rows affected (0.00 sec)
 
mysql>set global interactive_timeout=10;
Query OK,0 rows affected (0.00 sec)
mysql>show processlist;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect... Connection id: 79 Current database: *** NONE ***
 
+----+------+-----------------+------+---------+------+-------+------------------+
| Id |User | Host   | db | Command | Time | State | Info    |
+----+------+-----------------+------+---------+------+-------+------------------+
| 79 |root | 127.0.0.1:42016 | NULL | Query | 0 | NULL | show processlist |
+----+------+-----------------+------+---------+------+-------+------------------+
1 row in set (0.00 sec)

这里三次操作,可以看到clients数上升,这是由于timeout参数控制的,已经连接上数据的连接被杀掉。

mysql>show global status like 'aborted%';
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect... Connection id: 81 Current database: *** NONE ***
 
+------------------+-------+
|Variable_name | Value |
+------------------+-------+
|Aborted_clients | 22 |
|Aborted_connects | 5  |
+------------------+-------+
2 rows in set (0.01 sec)

error log中记载的是

[Warning] Aborted connection 81 to db: 'unconnected' user: 'root' host: '127.0.0.1' (Got timeout reading communication packets)
[Warning] Aborted connection 78 to db: 'unconnected' user: 'root' host: '127.0.0.1' (Got timeout reading communication packets) 
[Warning] Aborted connection 79 to db: 'unconnected' user: 'root' host: '127.0.0.1' (Got timeout reading communication packets)

Part6:案例3

在这个案例中我们看下最大连接数对数据库连接的行为影响

mysql>show global variables like 'max_conn%';
+--------------------+-------+
|Variable_name  | Value |
+--------------------+-------+
|max_connect_errors | 1000 |
|max_connections | 1024 |
+--------------------+-------+
2 rows in set (0.00 sec)
 
 
mysql>set global max_connections=2;
Query OK,0 rows affected (0.00 sec)

这里看到爆出了连接数过多的问题

[root@HE3~]# mysql -uroot -pMANAGER -h127.0.0.1
ERROR 1040 (HY000): Too many connections

而错误日志没有任何记录

Part7:案例4

第三方工具navicat select结果没有出来的时候选择停止则出现

clients上涨

mysql>show global status like 'aborted%';
+------------------+-------+
|Variable_name | Value |
+------------------+-------+
|Aborted_clients | 28 |
|Aborted_connects | 10 |
+------------------+-------+
2 rows in set (0.00 sec)

error log日志记录

170626 16:26:56 [Warning] Aborted connection 109 to db: 'helei1' user: 'sys_admin' host: '192.168.1.1' (Got an error writing communication packets)

Part8:原因总结

  1. 在MySQL中sleep状态数百秒的而且经常重复连接是应用程序在工作后没有关闭连接的症状之一,而是依靠数据库wait_timeout来关闭它们。强烈建议在操作结束时更改应用程序逻辑以正确关闭连接;
  2. 检查以确保max_allowed_packet的值足够高,并且客户端没有收到“数据包太大”消息。 这种情况他会中止连接,而不正确关闭它;
  3. 另一种可能性是TIME_WAIT。建议您确认连接被妥善管理并且是在应用端正常关闭;
  4. 确保事务正确提交(开始和提交),以便一旦应用程序“完成”连接,它将处于“clean”的状态;
  5. 您应该确保客户端应用程序不中止连接。 例如,如果PHP的选项max_execution_time设置为5秒,增加connect_timeout是没用的,因为PHP会杀死脚本。 其他编程语言和环境也有类似的选项;
  6. 连接延迟的另一个原因是DNS问题。 检查是否启用了skip-name-resolve,检查主机根据其IP地址而不是其主机名进行身份验证;
  7. 尝试增加MySQL的net_read_timeout和net_write_timeout值,看看是否减少了错误的数量。

总结

通过这4个案例,我们能够了解到,Aborted_clients、和Aborted_connects的区别,以及什么情况下会爆出什么样的错误日志,文章第二节中的几个Aborted错误是常见的错误,这类错误出现的时候脑海里要有一个理论知识,知道什么情况下,会出现什么样的错误,以便快速定位问题。由于笔者的水平有限,编写时间也很仓促,文中难免会出现一些错误或者不准确的地方,不妥之处恳请读者批评指正。

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# mysql  # aborted  # 告警日志  # MYSQL SERVER收缩日志文件实现方法  # MySQL中常见的几种日志汇总  # 详解 Mysql 事务和Mysql 日志  # MySQL读取Binlog日志常见的3种错误  # MySQL开启慢查询日志功能的方法  # mysql binlog(二进制日志)查看方法  # MySQL慢查询日志的基本使用教程  # 详解grep获取MySQL错误日志信息的方法  # MySQL Aborted connection告警日志的分析  # 的是  # 这两个  # 这类  # 应用程序  # 情况下  # 这一  # 指的是  # 连接数  # 客户端  # 而不是  # 这是  # 几个  # 是在  # 也有  # 好了  # 相关内容  # 在这个  # 之处  # 没有任何  # 也在 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 在centOS 7安装mysql 5.7的详细教程  Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例  清除minerd进程的简单方法  JS弹性运动实现方法分析  html5如何实现懒加载图片_ intersectionobserver api用法【教程】  今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】  如何实现javascript表单验证_正则表达式有哪些实用技巧  JavaScript如何实现音频处理_Web Audio API如何工作?  高防服务器租用如何选择配置与防御等级?  Laravel中的withCount方法怎么高效统计关联模型数量  晋江文学城电脑版官网 晋江文学城网页版直接进入  1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤  BootStrap整体框架之基础布局组件  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】  javascript中对象的定义、使用以及对象和原型链操作小结  Angular 表单中正确绑定输入值以确保提交与验证正常工作  Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载  昵图网官网入口 昵图网素材平台官方入口  如何在阿里云ECS服务器部署织梦CMS网站?  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  如何安全更换建站之星模板并保留数据?  Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践  北京的网站制作公司有哪些,哪个视频网站最好?  Mybatis 中的insertOrUpdate操作  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  html5audio标签播放结束怎么触发事件_onended回调方法【教程】  如何快速选择适合个人网站的云服务器配置?  香港服务器租用费用高吗?如何避免常见误区?  如何快速查询网址的建站时间与历史轨迹?  如何用景安虚拟主机手机版绑定域名建站?  Linux网络带宽限制_tc配置实践解析【教程】  Win11怎么开启自动HDR画质_Windows11显示设置HDR选项  Laravel Admin后台管理框架推荐_Laravel快速开发后台工具  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  香港服务器如何优化才能显著提升网站加载速度?  如何快速打造个性化非模板自助建站?  html如何与html链接_实现多个HTML页面互相链接【互相】  lovemo网页版地址 lovemo官网手机登录  Laravel如何使用Blade模板引擎?(完整语法和示例)  如何快速搭建个人网站并优化SEO?  laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法  Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)  Android滚轮选择时间控件使用详解  Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全  浅析上传头像示例及其注意事项  焦点电影公司作品,电影焦点结局是什么?