关于Aborted connection告警日志的分析[亲测有效]

关于Aborted connection告警日志的分析[亲测有效]前言: 有时候,连接MySQL的会话经常会异常退出,错误日志里会看到"_Got an error reading communication packets_"类型的告警。本篇文章

关于Aborted connection告警日志的分析

前言: 

有时候,连接MySQL的会话经常会异常退出,错误日志里会看到”Got an error reading communication packets“类型的告警。本篇文章我们一起来讨论下该错误可能的原因以及如何来规避。

1.状态变量Aborted_clients和Aborted_connects

首先我们来了解下Aborted_clients和Aborted_connects这两个状态变量的含义,当出现会话异常退出时,这两个状态值会有变化。根据官方文档描述,总结如下:

image.png
造成Aborted_connects状态变量增加的可能原因:

  1. 客户端试图访问数据库,但没有数据库的权限。
  2. 客户端使用了错误的密码。
  3. 连接包不包含正确的信息。
  4. 获取一个连接包需要的时间超过connect_timeout秒。

image.png
造成Aborted_clients状态变量增加的可能原因:

  1. 程序退出前,客户机程序没有调用mysql_close()。
  2. 客户端睡眠时间超过了wait_timeout或interactive_timeout参数的秒数。
  3. 客户端程序在数据传输过程中突然终止。

简单来说即:数据库会话未能正常连接到数据库,会造成Aborted_connects变量增加。数据库会话已正常连接到数据库但未能正常退出,会造成Aborted_clients变量增加。

2.Got an error reading communication packets原因分析

哪种情况会导致error log中出现“Aborted connection xxxx to db: “db” user: “dbuser” host: “hostname” (Got an error reading communication packets)”类似告警呢?下面我们根据上面可能的原因来做下具体测试。每次测试要注意状态变量Aborted_clients和Aborted_connects的变化及错误日志记录。

  • 测试一:错误密码,错误用户
1.测试前查看状态变量值
mysql> show global status like 'abort%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| Aborted_clients  | 0     |
| Aborted_connects | 0     |
+------------------+-------+

2.测试过程
# mysql -uroot -pwrongpass
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
# mysql -uroot1 -pwrongpass
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'root1'@'localhost' (using password: YES)

3.查看状态变化及错误日志
mysql> show global status like 'abort%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| Aborted_clients  | 0     |
| Aborted_connects | 2     |
+------------------+-------+
错误日志记录:
2020-03-16T17:58:35.318819+08:00 6 [Note] Access denied for user 'root'@'localhost' (using password: YES)
2020-03-16T17:59:04.153753+08:00 7 [Note] Access denied for user 'root1'@'localhost' (using password: YES)

结果:Aborted_connects有增加 error log无Aborted connection相关记录

代码100分

  • 测试二:睡眠时间超时或手动杀会话
代码100分1.测试前查看状态变量值
mysql> show global status like 'abort%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| Aborted_clients  | 0     |
| Aborted_connects | 2     |
+------------------+-------+

2.手动杀会话测试
mysql> show processlist;
+----+------+-----------+------+---------+------+----------+------------------+
| Id | User | Host      | db   | Command | Time | State    | Info             |
+----+------+-----------+------+---------+------+----------+------------------+
|  9 | root | localhost | NULL | Query   |    0 | starting | show processlist |
| 10 | root | localhost | NULL | Sleep   |    7 |          | NULL             |
+----+------+-----------+------+---------+------+----------+------------------+
2 rows in set (0.00 sec)
mysql> kill 10;
Query OK, 0 rows affected (0.00 sec)

3.查看状态变化及错误日志
mysql> show global status like 'abort%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| Aborted_clients  | 1     |
| Aborted_connects | 2     |
+------------------+-------+

结果:Aborted_clients有增加 error log无记录 ,
类似的,睡眠时间超时后Aborted_clients有增加 error log中有Aborted connection相关记录。

会话异常退出一般会造成Aborted connection告警,即我们可以通过Aborted_clients状态变量的变化来反映出是否存在异常会话,那么出现“_Got an error reading communication packets” _类似告警的原因就很明了了,查询相关资料,总结出造成Aborted connection告警的可能原因如下:

  1. 会话链接未正常关闭,程序没有调用mysql_close()。
  2. 睡眠时间超过wait_timeout或interactive_timeout参数的秒数。
  3. 查询数据包大小超过max_allowed_packet数值,造成链接中断。
  4. 其他网络或者硬件层面的问题。

3.问题避免与总结

其实Aborted connection告警是很难避免的,error log里或多或少会有少量Aborted connection信息,这种情况是可以忽略的,但是当你的error log里频繁出现Aborted connection告警,这时候就应该注意了,可能会对业务产生较大的影响。下面列举出几点避免错误的建议,希望对你有所帮助。

  1. 建议业务操作结束后,应用程序逻辑会正确关闭连接,以短连接替代长连接。
  2. 检查以确保max_allowed_packet的值足够高,并且客户端没有收到“数据包太大”消息。
  3. 确保客户端应用程序不中止连接,例如,如果PHP设置了max_execution_time为5秒,增加connect_timeout并不会起到作用,因为PHP会kill脚本。其他程序语言和环境也有类似的安全选项。
  4. 确保事务提交(begin和commit)都正确提交以保证一旦应用程序完成以后留下的连接是处于干净的状态。
  5. 检查是否启用了skip-name-resolve,检查主机根据其IP地址而不是其主机名进行身份验证。
  6. 尝试增加MySQL的net_read_timeout和net_write_timeout值,看看是否减少了错误的数量。

参考: 

公众号.jpg

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/9437.html

(0)
上一篇 2023-02-08
下一篇 2023-02-08

相关推荐

  • Python中将浮点数转换为字符串的方法

    Python中将浮点数转换为字符串的方法在Python编程中,有时需要将浮点数转换为字符串,比如将一个小数转换为字符串后,再拼接到其他字符串中。Python中提供了多种方式来实现这个功能,本文将介绍其中的几种方式。

    2024-06-21
    51
  • 数据传输 | dtle 使用初探

    数据传输 | dtle 使用初探作者:马莹乐 爱可生研发团队成员,负责 mysql 中间件和数据库管理平台的测试。擅长找茬(测试技术爱好者),欢迎大家试用 dtle~ 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得…

    2023-02-12
    146
  • 数据库未来发展趋势(下)「终于解决」

    数据库未来发展趋势(下)「终于解决」新应用驱动的数据库(5G、车、终端云) 从数据库诞生开始,新的应用领域就不断为数据库带来新诉求,例如巨大的数据量、更短的数据处理时间、更高的可靠性、新的数据类型,而数据库也在满足这些新的诉求的同时得…

    2023-04-13
    184
  • Redis学习笔记:Redis在Windows下的安装[通俗易懂]

    Redis学习笔记:Redis在Windows下的安装[通俗易懂]一、Redis下载 官网下载地址:http://redis.io/download GitHub下载地址:https://github.com/MSOpenTech/redis/tags 备注:现在的

    2023-02-02
    148
  • Python Send协议:快速发送数据的高效解决方案

    Python Send协议:快速发送数据的高效解决方案在现代通讯网络中,数据传输的效率和速度对于各种应用场景来说尤为重要。传统的网络传输采用TCP协议,普遍存在流量控制、重传等造成传输负担和延迟的问题。为了更好地满足网络传输中高效发送数据的需求,Python Send协议横空出世。

    2024-02-02
    100
  • 利用Python的random模块生成随机数

    利用Python的random模块生成随机数Python自带的random模块为生成伪随机数提供了支持。random模块的重要函数有:randint、random、uniform、choice、shuffle等,可以生成整数、浮点数、列表等不同类型的随机数。

    2023-12-16
    113
  • Ubuntu 彻底卸载 MySQL 数据库[亲测有效]

    Ubuntu 彻底卸载 MySQL 数据库[亲测有效]
    Ubuntu 18.04 彻底卸载MySQL 5.7.31 1. 查看MySQL的依赖项 dpkg –list|grep mysql 2. 卸载 mysq…

    2023-04-07
    149
  • Python自然语言处理利器之分词器实现

    Python自然语言处理利器之分词器实现分词器是自然语言处理(NLP)中的一项基本任务,即将文本分割成有意义的单元,例如语句中的词语或单词。在中文中,分词任务尤为重要,因为中文中没有明确的单词边界。分词器的好坏会直接影响后续的文本处理工作,所以在NLP领域分词器一直是一个比较热门的话题。

    2024-04-01
    76

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注