• 售前

  • 售后

热门帖子
入门百科

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

[复制链接]
haiyuezhihun 显示全部楼层 发表于 2021-10-25 19:37:47 |阅读模式 打印 上一主题 下一主题
本文主要给各人先容的是关于MySQL中Aborted告警的干系内容,分享出来供各人参考学习,下面来一起看看具体的先容:
实战
Part1:写在最前

在MySQL的error log中,我们会常常性看到一些各类的Aborted connection错误,本文中会针对这类错误举行一个开端分析,并了解一个题目产生后的根本排查思绪和方法。掌握这种方法是至关重要的,而不是出现题目了,去猜,去试。数据库出现题目的时间必要DBA在短时间内快速办理题目,因此一个好与坏的DBA,区别也在于此。
Part2:种类
  1. [Warning] Aborted connection 305628 to db: 'db' user: 'dbuser' host: 'hostname' (Got an error reading communication packets)
  2. [Warning] Aborted connection 81 to db:'unconnected' user: 'root' host: '127.0.0.1' (Got timeout reading communication
  3. packets)
  4. [Warning] Aborted connection 109 to db:'helei1' user: 'sys_admin' host: '192.168.1.1' (Got an error writing communication packets)
  5. [Warning] Access denied for user 'root'@'127.0.0.1' (using password: YES)
  6. [Warning] Got an error writing communication packets
复制代码
Part3:重点参数分析
wait_timeout
Command-Line Format--wait-timeout=#
System VariableNamewait_timeout
Variable ScopeGlobal, Session
Dynamic VariableYes
Permitted Values (Windows)Typeinteger
Default28800
Min Value1
Max Value2147483
Permitted Values (Other)Typeinteger
Default28800
Min Value1
Max Value31536000

这个参数指的是数据库体系在关闭它之前,服务器等待非交互式连接上的活动的秒数。
interactive_timeout
Command-Line Format--interactive-timeout=#
System VariableNameinteractive_timeout
Variable ScopeGlobal, Session
Dynamic VariableYes
Permitted ValuesTypeinteger
Default28800
Min Value1

这个参数指的是在关闭交互式连接之前,服务器等待活动的秒数
Warning:警告这两个参数建议一起调治,可以大概制止一些坑。
本文的两个参数值采用的是默认值
  1. mysql> show global variables like '%timeout%';
  2. +----------------------------+----------+
  3. | Variable_name    | Value |
  4. +----------------------------+----------+
  5. | connect_timeout   | 10  |
  6. | delayed_insert_timeout  | 300  |
  7. | innodb_lock_wait_timeout | 50  |
  8. | innodb_rollback_on_timeout | OFF  |
  9. |interactive_timeout  | 28800 |
  10. | lock_wait_timeout   | 31536000 |
  11. | net_read_timeout   | 30  |
  12. | net_write_timeout   | 60  |
  13. | slave_net_timeout   | 3600  |
  14. |wait_timeout    | 28800 |
  15. +----------------------------+----------+
  16. 10 rows in set (0.01 sec)
复制代码
别的在数据库中,我们重点关注下这两个参数,看看什么环境下Aborted_clients会提升,什么环境下Aborted_connects 会提升
  1. mysql>show global status like 'aborted%';
  2. +------------------+-------+
  3. |Variable_name | Value |
  4. +------------------+-------+
  5. |Aborted_clients | 19 |
  6. |Aborted_connects | 0  |
  7. +------------------+-------+
  8. 2 rows inset (0.00 sec)
复制代码
Part4:案例1
这里我故意输入错误的密码5次,来看下数据库的error log和Aborted的哪个参数纪录了这一题目
  1. [root@HE3~]# mysql -uroot -pwrongpass -h127.0.0.1
  2. ERROR 1045 (28000): Access denied for user 'root'@'127.0.0.1' (using password: YES)
  3. [root@HE3~]# mysql -uroot -pwrongpass -h127.0.0.1
  4. ERROR 1045 (28000): Access denied for user 'root'@'127.0.0.1' (using password: YES)
  5. [root@HE3~]# mysql -uroot -pwrongpass -h127.0.0.1
  6. ERROR 1045 (28000): Access denied for user 'root'@'127.0.0.1' (using password: YES)
  7. [root@HE3~]# mysql -uroot -pwrongpass -h127.0.0.1
  8. ERROR 1045 (28000): Access denied for user 'root'@'127.0.0.1' (using password: YES)
  9. [root@HE3~]# mysql -uroot -pwrongpass -h127.0.0.1
  10. ERROR 1045 (28000): Access denied for user 'root'@'127.0.0.1' (using password: YES)
复制代码
可以看出,这里的Aborted_connects 记录了密码错误的这一题目
  1. mysql>show global status like 'aborted%';
  2. +------------------+-------+
  3. |Variable_name | Value |
  4. +------------------+-------+
  5. |Aborted_clients | 19 |
  6. |Aborted_connects | 5  |
  7. +------------------+-------+
  8. 2 rows inset (0.00 sec)
复制代码
error log中,也纪录了这类密码输错的信息
  1. [Warning] Access denied for user'root'@'127.0.0.1' (using password: YES)
  2. [Warning] Access denied for user 'root'@'127.0.0.1' (using password:YES)
  3. [Warning] Access denied for user 'root'@'127.0.0.1' (using password:YES)
  4. [Warning] Access denied for user 'root'@'127.0.0.1' (using password:YES)
  5. [Warning] Access denied for user 'root'@'127.0.0.1' (using password:YES)
复制代码
Part5:案例2

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

这里我们将这两个参数均设置为10秒
  1. mysql>set global wait_timeout=10;
  2. Query OK,0 rows affected (0.00 sec)
  3. mysql>set global interactive_timeout=10;
  4. Query OK,0 rows affected (0.00 sec)
  5. mysql>show processlist;
  6. ERROR 2006 (HY000): MySQL server has gone away
  7. No connection. Trying to reconnect... Connection id: 79 Current database: *** NONE ***
  8. +----+------+-----------------+------+---------+------+-------+------------------+
  9. | Id |User | Host   | db | Command | Time | State | Info    |
  10. +----+------+-----------------+------+---------+------+-------+------------------+
  11. | 79 |root | 127.0.0.1:42016 | NULL | Query | 0 | NULL | show processlist |
  12. +----+------+-----------------+------+---------+------+-------+------------------+
  13. 1 row in set (0.00 sec)
复制代码
这里三次操作,可以看到clients数上升,这是由于timeout参数控制的,已经连接上数据的连接被杀掉。
  1. mysql>show global status like 'aborted%';
  2. ERROR 2006 (HY000): MySQL server has gone away
  3. No connection. Trying to reconnect... Connection id: 81 Current database: *** NONE ***
  4. +------------------+-------+
  5. |Variable_name | Value |
  6. +------------------+-------+
  7. |Aborted_clients | 22 |
  8. |Aborted_connects | 5  |
  9. +------------------+-------+
  10. 2 rows in set (0.01 sec)
复制代码
error log中纪录的是
  1. [Warning] Aborted connection 81 to db: 'unconnected' user: 'root' host: '127.0.0.1' (Got timeout reading communication packets)
  2. [Warning] Aborted connection 78 to db: 'unconnected' user: 'root' host: '127.0.0.1' (Got timeout reading communication packets)
  3. [Warning] Aborted connection 79 to db: 'unconnected' user: 'root' host: '127.0.0.1' (Got timeout reading communication packets)
复制代码
Part6:案例3

在这个案例中我们看下最大连接数对数据库连接的行为影响
  1. mysql>show global variables like 'max_conn%';
  2. +--------------------+-------+
  3. |Variable_name  | Value |
  4. +--------------------+-------+
  5. |max_connect_errors | 1000 |
  6. |max_connections | 1024 |
  7. +--------------------+-------+
  8. 2 rows in set (0.00 sec)
  9. mysql>set global max_connections=2;
  10. Query OK,0 rows affected (0.00 sec)
复制代码
这里看到爆出了连接数过多的题目
  1. [root@HE3~]# mysql -uroot -pMANAGER -h127.0.0.1
  2. ERROR 1040 (HY000): Too many connections
复制代码
而错误日记没有任何记录
Part7:案例4

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

clients上涨
  1. mysql>show global status like 'aborted%';
  2. +------------------+-------+
  3. |Variable_name | Value |
  4. +------------------+-------+
  5. |Aborted_clients | 28 |
  6. |Aborted_connects | 10 |
  7. +------------------+-------+
  8. 2 rows in set (0.00 sec)
复制代码
error log日记记录
  1. 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:缘故原由总结
      
  • 在MySQL中sleep状态数百秒的而且常常重复连接是应用步伐在工作后没有关闭连接的症状之一,而是依靠数据库wait_timeout来关闭它们。猛烈建议在操作竣事时更改应用步伐逻辑以正确关闭连接;  
  • 查抄以确保max_allowed_packet的值足够高,而且客户端没有收到“数据包太大”消息。 这种环境他会中止连接,而不正确关闭它;  
  • 另一种可能性是TIME_WAIT。建议您确认连接被妥善管理而且是在应用端正常关闭;  
  • 确保变乱正确提交(开始和提交),以便一旦应用步伐“完成”连接,它将处于“clean”的状态;  
  • 您应该确保客户端应用步伐不中止连接。 比方,如果PHP的选项max_execution_time设置为5秒,增长connect_timeout是没用的,由于PHP会杀死脚本。 其他编程语言和环境也有类似的选项;  
  • 连接延迟的另一个缘故原由是DNS题目。 查抄是否启用了skip-name-resolve,查抄主机根据其IP地点而不是其主机名举行身份验证;  
  • 尝试增长MySQL的net_read_timeout和net_write_timeout值,看看是否镌汰了错误的数量。
总结

通过这4个案例,我们可以大概了解到,Aborted_clients、和Aborted_connects的区别,以及什么环境下会爆出什么样的错误日记,文章第二节中的几个Aborted错误是常见的错误,这类错误出现的时间脑海里要有一个理论知识,知道什么环境下,会出现什么样的错误,以便快速定位题目。由于笔者的水平有限,编写时间也很仓促,文中难免会出现一些错误或者禁绝确的地方,不当之处恳请读者品评指正。
好了,以上就是这篇文章的全部内容了,盼望本文的内容对各人的学习或者工作能带来一定的资助,如果有疑问各人可以留言交流,谢谢各人对脚本之家的支持。

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作