本文主要给大家介绍的是关于MySQL中Aborted告警的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍:
实战
Part1:写在最前
在MySQL的error log中,我们会经常性看到一些各类的Aborted connection错误,本文中会针对这类错误进行一个初步分析,并了解一个问题产生后的基本排查思路和方法。掌握这种方法是至关重要的,而不是出现问题了,去猜,去试。数据库出现问题的时候需要DBA在短时间内快速解决问题,因此一个好与坏的DBA,区别也在于此。
Part2:种类
[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 communication
packets)
[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
Part3:重点参数分析
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 |
这个参数指的是数据库系统在关闭它之前,服务器等待非交互式连接上的活动的秒数。
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 |
这个参数指的是在关闭交互式连接之前,服务器等待活动的秒数
Warning:警告这两个参数建议一起调节,能够避免一些坑。
本文的两个参数值采用的是默认值
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)
另外在数据库中,我们重点关注下这两个参数,看看什么情况下Aborted_clients会提升,什么情况下Aborted_connects 会提升
mysql>show global status like 'aborted%';
+------------------+-------+
|Variable_name | Value |
+------------------+-------+
|Aborted_clients | 19 |
|Aborted_connects | 0 |
+------------------+-------+
2 rows inset (0.00 sec)
Part4:案例1
这里我故意输入错误的密码5次,来看下数据库的error log和Aborted的哪个参数记载了这一问题'并且是在应用端正常关闭;
确保事务正确提交(开始和提交),以便一旦应用程序“完成”连接,它将处于“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错误是常见的错误,这类错误出现的时候脑海里要有一个理论知识,知道什么情况下,会出现什么样的错误,以便快速定位问题。由于笔者的水平有限,编写时间也很仓促,文中难免会出现一些错误或者不准确的地方,不妥之处恳请读者批评指正。
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对社区的支持。 |