《MysqL应用通过案例分析MysqL中令人头疼的Aborted告警》要点:
本文介绍了MysqL应用通过案例分析MysqL中令人头疼的Aborted告警,希望对您有用。如果有疑问,可以联系我们。
MysqL实例本文主要给大家介绍的是关于MysqL中Aborted告警的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍:
MysqL实例实战
MysqL实例Part1:写在最前
MysqL实例在MysqL的error log中,我们会经常性看到一些各类的Aborted connection错误,本文中会针对这类错误进行一个初步分析,并了解一个问题产生后的基本排查思路和方法.掌握这种方法是至关重要的,而不是出现问题了,去猜,去试.数据库出现问题的时候需要DBA在短时间内快速解决问题,因此一个好与坏的DBA,区别也在于此.
MysqL实例Part2:种类
MysqL实例[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 communicationpackets)[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
MysqL实例Part3:重点参数分析
MysqL实例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 |
MysqL实例这个参数指的是数据库系统在关闭它之前,服务器等待非交互式连接上的活动的秒数.
MysqL实例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 |
MysqL实例这个参数指的是在关闭交互式连接之前,服务器等待活动的秒数
MysqL实例Warning:警告这两个参数建议一起调节,能够避免一些坑.
MysqL实例本文的两个参数值采用的是默认值
MysqL实例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)
MysqL实例另外在数据库中,我们重点关注下这两个参数,看看什么情况下Aborted_clIEnts会提升,什么情况下Aborted_connects 会提升
MysqL实例MysqL>show global status like 'aborted%';+------------------+-------+|Variable_name | Value |+------------------+-------+|Aborted_clIEnts | 19 ||Aborted_connects | 0 |+------------------+-------+2 rows inset (0.00 sec)
MysqL实例Part4:案例1
MysqL实例这里我故意输入错误的密码5次,来看下数据库的error log和Aborted的哪个参数记载了这一问题
MysqL实例[root@HE3~]# MysqL -uroot -pwrongpass -h127.0.0.1ERROR 1045 (28000): Access denIEd for user 'root'@'127.0.0.1' (using password: YES)[root@HE3~]# MysqL -uroot -pwrongpass -h127.0.0.1ERROR 1045 (28000): Access denIEd for user 'root'@'127.0.0.1' (using password: YES)[root@HE3~]# MysqL -uroot -pwrongpass -h127.0.0.1ERROR 1045 (28000): Access denIEd for user 'root'@'127.0.0.1' (using password: YES)[root@HE3~]# MysqL -uroot -pwrongpass -h127.0.0.1ERROR 1045 (28000): Access denIEd for user 'root'@'127.0.0.1' (using password: YES)[root@HE3~]# MysqL -uroot -pwrongpass -h127.0.0.1ERROR 1045 (28000): Access denIEd for user 'root'@'127.0.0.1' (using password: YES)
MysqL实例可以看出,这里的Aborted_connects 记录了密码错误的这一问题
MysqL实例MysqL>show global status like 'aborted%';+------------------+-------+|Variable_name | Value |+------------------+-------+|Aborted_clIEnts | 19 ||Aborted_connects | 5 |+------------------+-------+2 rows inset (0.00 sec)
MysqL实例error log中,也记载了这类密码输错的信息
MysqL实例[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)
MysqL实例Part5:案例2
MysqL实例接下来我们看下文章第三节提到的两个重点参数对数据库连接的行为影响
MysqL实例这里我们将这两个参数均配置为10秒
MysqL实例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 awayNo 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)
MysqL实例这里三次 *** 作,可以看到clIEnts数上升,这是由于timeout参数控制的,已经连接上数据的连接被杀掉.
MysqL实例MysqL>show global status like 'aborted%';ERROR 2006 (HY000): MysqL server has gone awayNo 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)
MysqL实例error log中记载的是
MysqL实例[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)
MysqL实例Part6:案例3
MysqL实例在这个案例中我们看下最大连接数对数据库连接的行为影响
MysqL实例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)
MysqL实例这里看到爆出了连接数过多的问题
MysqL实例[root@HE3~]# MysqL -uroot -pMANAGER -h127.0.0.1ERROR 1040 (HY000): Too many connections
MysqL实例而错误日志没有任何记录
MysqL实例Part7:案例4
MysqL实例第三方工具navicat select结果没有出来的时候选择停止则出现
MysqL实例clIEnts上涨
MysqL实例MysqL>show global status like 'aborted%';+------------------+-------+|Variable_name | Value |+------------------+-------+|Aborted_clIEnts | 28 ||Aborted_connects | 10 |+------------------+-------+2 rows in set (0.00 sec)
MysqL实例error log日志记录
MysqL实例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)
MysqL实例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值,看看是否减少了错误的数量.MysqL实例总结
MysqL实例通过这4个案例,我们能够了解到,Aborted_clIEnts、和Aborted_connects的区别,以及什么情况下会爆出什么样的错误日志,文章第二节中的几个Aborted错误是常见的错误,这类错误出现的时候脑海里要有一个理论知识,知道什么情况下,会出现什么样的错误,以便快速定位问题.由于笔者的水平有限,编写时间也很仓促,文中难免会出现一些错误或者不准确的地方,不妥之处恳请读者批评指正.
MysqL实例好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对内存溢出的支持.
总结以上是内存溢出为你收集整理的Mysql应用通过案例分析MySQL中令人头疼的Aborted告警全部内容,希望文章能够帮你解决Mysql应用通过案例分析MySQL中令人头疼的Aborted告警所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)