MySQL 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 -pwrongpassmysql: [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 -pwrongpassmysql: [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值,看看是否减少了错误的数量。

以上就是MySQL Aborted connection告警日志的分析的详细内容,更多关于MySQL Aborted connection告警日志的资料请关注我们其它相关文章!

(0)

相关推荐

  • MySQL慢查询日志的基本使用教程

    慢查询日志相关参数 MySQL 慢查询的相关参数解释:slow_query_log :是否开启慢查询日志,1表示开启,0表示关闭. slow_query_log :是否开启慢查询日志,1表示开启,0表示关闭. log-slow-queries :旧版(5.6以下版本)MySQL数据库慢查询日志存储路径.可以不设置该参数,系统则会默认给一个缺省的文件host_name-slow.log slow-query-log-file:新版(5.6及以上版本)MySQL数据库慢查询日志存储路径.可以不设置该

  • 详解 Mysql 事务和Mysql 日志

    事务特性 1.原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节. 2.一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 .比如A向B转账,不可能A扣了钱,B却没收到. 3.隔离性(Isolation):同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰.比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账. 4.持久性(Durability):事务完成后,事务对数据库的所有更新

  • MySQL读取Binlog日志常见的3种错误

    1. mysqlbinlog: [ERROR] unknown variable 'default-character-set=utf8mb4' 当我们在my.cnf中添加default-character-set=utf8mb4选项,那么在mysqlbinlog查看binlog时就会报错. 解决方案:.mysqlbinlog 后面添加 --no-defaults 选项 例如: mysql bin可执行文件所在路径/bin/mysqlbinlog --no-defaults binlog所在目录

  • 详解grep获取MySQL错误日志信息的方法

    为方便维护MySQL,写了个脚本用以提供收集错误信息的接口.这些错误信息来自与MySQL错误日志,而 通过grep mysql可以获取error-log的路径. 以下是全部相关代码: #!/usr/bin/env python2.7 #-*- encoding: utf-8 -*- """ 该模块用于提取每天mysql日志中的异常或错误信息 author: xiaomo email: moxiaomomo@gmail.com """ import

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

    本文主要给大家介绍的是关于MySQL中Aborted告警的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍: 实战 Part1:写在最前 在MySQL的error log中,我们会经常性看到一些各类的Aborted connection错误,本文中会针对这类错误进行一个初步分析,并了解一个问题产生后的基本排查思路和方法.掌握这种方法是至关重要的,而不是出现问题了,去猜,去试.数据库出现问题的时候需要DBA在短时间内快速解决问题,因此一个好与坏的DBA,区别也在于此. Part2:种类

  • MySQL中常见的几种日志汇总

    前言: 在 MySQL 系统中,有着诸多不同类型的日志.各种日志都有着自己的用途,通过分析日志,我们可以优化数据库性能,排除故障,甚至能够还原数据.这些不同类型的日志有助于我们更清晰的了解数据库,在日常学习及运维过程中也会和这些日志打交道.本节内容将带你了解 MySQL 数据库中几种常用日志的作用及管理方法. 1.错误日志(errorlog) 错误日志记录着 mysqld 启动和停止,以及服务器在运行过程中发生的错误及警告相关信息.当数据库意外宕机或发生其他错误时,我们应该去排查错误日志. lo

  • MYSQL SERVER收缩日志文件实现方法

    事务日志记录着在相关数据库上的操作,同时还存储数据库恢复(recovery)的相关信息. 收缩日志的原因有很多种,有些是考虑空间不足,有些则是应用程序限制导致的. 下面介绍的是在简单模式下,进行收缩操作. 一.命令行搞定 USE MASTER GO ALTER DATABASE {DBName} SET RECOVERY SIMPLE WITH NO_WAIT GO ALTER DATABASE {DBName} SET RECOVERY SIMPLE --简单模式 GO USE {DBName

  • MySQL开启慢查询日志功能的方法

    mysql慢查询日志对于跟踪有问题的查询非常有用,可以分析出当前程序里是否有很耗费资源的sql语句,这是一个有用的日志.它对于性能的影响不大(假设所有查询都很快),并且强调了那些最需要注意的查询(丢失了索引或索引没有得到最佳应用),那如何打开mysql的慢查询日志记录呢? 开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能. (1)配置开启 Linux: 在mysql配置文件 my.cnf 中增加如下语句: log-slow-qu

  • mysql binlog(二进制日志)查看方法

    例如,在创建新表或更新现有表上的数据时,这些事件将存储在mysql binlog中,也就是MySQL数据库的二进制日志. 二进制日志在MySQL复制中非常有用,主服务器将数据从二进制日志发送到远程服务器. 当您在MySQL中执行任何类型的恢复操作时,您还将处理二进制日志文件. mysqlbinlog命令用于以可读的用户友好格式查看二进制日志的内容. 那么我们怎么获取查看mysql binlog(二进制日志)? 下面给大家介绍获取当前二进制日志列表的命令方法. 从mysql执行以下show bin

  • MySQL Aborted connection告警日志的分析

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

  • 详解监听MySQL的binlog日志工具分析:Canal

    Canal是阿里巴巴旗下的一款开源项目,利用Java开发.主要用途是基于MySQL数据库增量日志解析,提供增量数据订阅和消费,目前主要支持MySQL. GitHub地址:https://github.com/alibaba/canal 在介绍Canal内部原理之前,首先来了解一下MySQL Master/Slave同步原理: MySQL master启动binlog机制,将数据变更写入二进制日志(binary log, 其中记录叫做二进制日志事件binary log events,可以通过sho

  • 对MySQL慢查询日志进行分析的基本教程

    0.首先查看当前是否开启慢查询: (1)快速办法,运行sql语句 show VARIABLES like "%slow%" (2)直接去my.conf中查看. my.conf中的配置(放在[mysqld]下的下方加入) [mysqld] log-slow-queries = /usr/local/mysql/var/slowquery.log long_query_time = 1 #单位是秒 log-queries-not-using-indexes 使用sql语句来修改:不能按照m

  • MySQL 实例无法启动的问题分析及解决

    前言 前几天,有位朋友微信联系我,告知一个生产数据库,在机器宕机恢复后,实例启动失败,而且该实例没有做任何的高可用.容灾.备份等,对业务影响非常大,希望能够协助排查一下,我也在第一时间就加入到排查中. 场景分析 (1)首先查看错误日志,报错很清晰"Could not open log file",无法打开日志文件 2021-01-06 13:23:51 20464 [ERROR] Failed to open log (file 'something is definitely wro

  • Spark网站日志过滤分析实例讲解

    目录 日志过滤 日志分析 日志过滤 对于一个网站日志,首先要对它进行过滤,删除一些不必要的信息,我们通过scala语言来实现,清洗代码如下,代码要通过别的软件打包为jar包,此次实验所用需要用到的代码都被打好jar包,放到了/root/jar-files文件夹下: package com.imooc.log import com.imooc.log.SparkStatFormatJob.SetLogger import com.imooc.log.util.AccessConvertUtil i

  • mysql 开启慢查询 如何打开mysql的慢查询日志记录

    mysql慢查询日志对于跟踪有问题的查询非常有用,可以分析出当前程序里有很耗费资源的sql语句,那如何打开mysql的慢查询日志记录呢? 其实打开mysql的慢查询日志很简单,只需要在mysql的配置文件里(windows系统是my.ini,linux系统是my.cnf)的[mysqld]下面加上如下代码: 复制代码 代码如下: log-slow-queries=/var/lib/mysql/slowquery.log long_query_time=2 注: log-slow-queries

  • MySQL 出现错误1418 的原因分析及解决方法

    MySQL 出现错误1418 的原因分析及解决方法 具体错误: 使用mysql创建.调用存储过程,函数以及触发器的时候会有错误符号为1418错误. ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL,or READS SQL DATA in its declaration and binary logging is enabled(you *might* want to use the less safe log

  • Mysql数据库之Binlog日志使用总结(必看篇)

    binlog二进制日志对于mysql数据库的重要性有多大,在此就不多说了.下面根据本人的日常操作经历,并结合网上参考资料,对binlog日志使用做一梳理: 一.binlog日志介绍 1)什么是binlog binlog日志用于记录所有更新了数据或者已经潜在更新了数据(例如,没有匹配任何行的一个DELETE)的所有语句.语句以"事件"的形式保存,它描述数据更改. 2)binlog作用 因为有了数据更新的binlog,所以可以用于实时备份,与master/slave主从复制结合. 3)和b

  • MYSQL慢查询与日志的设置与测试

    一.简介 开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能. 二.参数说明 slow_query_log 慢查询开启状态 slow_query_log_file 慢查询日志存放的位置(这个目录需要MySQL的运行帐号的可写权限,一般设置为MySQL的数据存放目录) long_query_time 查询超过多少秒才记录 三.设置步骤 1.查看慢查询相关参数 mysql> show variables like 'slow_quer

随机推荐