关于Aborted connection告警日志的分析

前言:?

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

1.状态变量Aborted_clients和Aborted_connects

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


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

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


造成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相关记录
  • 测试二:睡眠时间超时或手动杀会话
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值,看看是否减少了错误的数量。

参考:?

原文地址:https://www.cnblogs.com/kunjian/p/12530653.html

时间: 2024-10-04 03:49:02

关于Aborted connection告警日志的分析的相关文章

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)客户端正常连接,但是被异常结束

【故障处理】告警日志报“ORA-01565 Unable To open Spfile”

[故障处理]告警日志报"ORA-01565 Unable To open Spfile" 1.1  BLOG文档结构图 1.2  故障分析及解决过程 1.2.1  故障环境介绍 项目 source db db 类型 RAC db version 12.1.0.2.0 db 存储 ASM OS版本及kernel版本 SuSE Linux Enterprise Server(SLES 11) 64位 1.2.2  故障发生现象及报错信息 客户的12.1.0.2的RAC库告警日志报ORA-0

Linux/Unix shell 监控Oracle告警日志(monitor alter log file)

使用shell脚本实现对Oracle数据库的监控与管理将大大简化DBA的工作负担,如常见的对实例的监控,监听的监控,告警日志的监控,以及数据库的备份,AWR report的自动邮件等.本文给出Linux 下使用 shell 脚本来监控 Oracle 告警日志(monitor alter log file). Linux Shell的相关参考:        Linux/Unix shell 脚本中调用SQL,RMAN脚本        Linux/Unix shell sql 之间传递变量   

告警日志

告警日志介绍 告警日志文件是一类特殊的跟踪文件(trace file).告警日志文件命名一般为alert_<SID>.log,其中SID为ORACLE数据库实例名称.数据库告警日志是按时间顺序记录message和错误信息. 告警日志位置 在ORACLE 10g中,BACKGROUND_DUMP_DEST参数确定了告警日志的位置,但是告警日志的文件名无法修改,告警日志的名称为:alert_<SID>.log ,其中<SID>是实例的名称.BACKGROUND_DUMP_D

利用ELKStack日志平台分析短信攻击

话说互联网的江湖一点都不风平浪静,这不刚处理完 http://fengwan.blog.51cto.com/508652/1757465 短信攻击,敌人又卷土重来,而且方法更先进. 从上面可以看到敌人通过模拟Referer对我方阵地实施打击,不断耗费我方短信资源. 通过对敌人进行画像: 分析IP 分析X-FORWARD-IP 分析设备 分析浏览器 分析浏览器版本 眼前已经一目了然,敌人虽然来自四面八方(不同的IP),但是所使用的武器是一台Samsung GT-I9505的Android 4.2.

归档—监控ORACLE数据库告警日志

ORACLE的告警日志里面包含许多有用的信息,尤其是一些ORACLE的ORA错误信息,所以有必要及时归档.监控数据库告警日志的ORA错误,及时提醒数据库管理员DBA处理这些错误信息,那么我们首先来看看告警日志的内容片断:   归档告警日志文件 告警日志文件如果不加管理的话,那么文件会持续增长,有时候文件会变得非常大,不利于读写.一般建议将告警日志按天归档,归档文件保留三个月(视情况而定),下面来看看将告警日志文件归档的两个Shell脚本: alert_log_archive.sh version

日志收集分析系统架构

日志收集分析系统架构   一.部署架构 日志收集系统一般包括如图所示三层.Web服务器层,日志收集层,日志存储层.Web服务器层是日志的来源,一般部署web应用供用户访问,产生日志,该节点上一般需要部署日志收集程序的agent.日志收集层手机web服务器产生的日志传输给日志存储层,存储层一般使用分布式文件系统HDFS,日志可以存储在hdfs上或者hbase上. 以scribe作为日志收集系统架构,scribe分为scribe agent和scribe server 以kafka作为日志收集系统架

rsyslog+MySQL+loganalyzer日志集中分析管理

前言   rsyslog系统日志,在CentOS5上叫syslog,而在CentOS6上叫rsyslog,叫增强版的syslog,CentOS5上的配置文件在/etc/syslog.conf下,而CentOS6在/etc/rsyslog.conf下.       syslog默认是把我们的日志放到文件.用户.日志服务器.管道中.       rsyslog在syslog的基础上还多了一条途径,允许把日志放到mysql数据中.       rsyslog比syslog好在哪里:       Mul

结合Docker快速搭建ELK日志收集分析平台

结合Docker快速搭建ELK日志收集分析平台 2017-03-27 09:39 阅读 172 评论 0 作者:马哥Linux运维-Eason ELK Stack ELK (Elasticsearch + Logstash + Kibana),是一个开源的日志收集平台,用于收集各种客户端日志文件在同一个平台上面做数据分析. Introduction Elasticsearch, 基于json分析搜索引擎Logstash, 动态数据收集管道Kibana, 可视化视图将elasticsearh所收集