MySQL 常见错误之 Aborted connection xxx
报错示例
1 |
|
排错思路
如果出现连接问题,例如通信错误或连接中断,通常使用以下信息源来诊断问题
错误日志。
1
2
3
4
5# 临时生效,重启失效
SET GLOBAL log_error = 'path_to_file'
# 修改配置文件(通常路径为/etc/my.cnf),永久生效
log_error = 'path_to_file'如果
log_error_verbosity
系统变量设置为 3,您可能会在错误日志中找到如下消息:1
[Note] Aborted connection xxx to db: 'employees' user: 'josh'
一般查询日志。
1
2
3
4
5
6
7# 临时生效,重启失效
SET GLOBAL general_log = 'ON';
SET GLOBAL general_log_file = 'path_to_file';
# 修改配置文件(通常路径为/etc/my.cnf),永久生效
general_log = 'ON';
general_log_file = 'path_to_file'状态变量。官方链接
mysql> show status like '%Threads%'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | Delayed_insert_threads | 0 | | Slow_launch_threads | 0 | | Threads_cached | 2 | | Threads_connected | 7 | | Threads_created | 105 | | Threads_running | 1 | +------------------------+-------+ 6 rows in set (0.00 sec) mysql> show status like '%aborted%'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | Aborted_clients | 346 | | Aborted_connects | 0 | +------------------+-------+ 2 rows in set (0.01 sec)
如果客户端甚至无法连接,服务器会增加Aborted_connects
状态变量。由于以下原因,可能会发生不成功的连接尝试:
客户端尝试访问数据库但没有权限。
客户端使用了错误的密码。
连接数据包不包含正确的信息。
connect_timeout
获取连接数据包需要几秒钟以上的时间。
如果发生此类事情,则可能表明有人试图闯入您的服务器!如果启用了通用查询日志,则会将此类问题的消息记录到其中。
如果客户端成功连接但后来不正确地断开连接或终止,则服务器增加 Aborted_clients
状态变量,并将Aborted 连接消息记录到错误日志中。原因可能是以下任何一种:
mysql_close()
客户端程序在退出前没有调用 。客户端在没有向服务器发出任何请求的情况下,时间超过
wait_timeout
和interactive_timeout
设置的值wait_timeout
interactive_timeout
客户端程序在数据传输过程中突然结束。
中止连接或中止客户端出现问题的其他原因:
max_allowed_packet
变量值太小或查询需要的内存比您为 mysqld 分配的更多。在 Linux 中使用以太网协议,半双工和全双工。一些 Linux 以太网驱动程序有这个错误。您应该通过在客户端和服务器机器之间使用 FTP 传输一个巨大的文件来测试这个错误。如果传输进入burst-pause-burst-pause 模式,您将遇到Linux 双工综合症。将网卡和集线器/交换机的双工模式切换为全双工或半双工,并测试结果以确定最佳设置。
导致读取中断的线程库问题。
配置错误的 TCP/IP,导致 TCP 连接被断开
防火墙切断空闲的 TCP 连接
- 一些防火墙有一个 TCP 超时时间(通常为半小时或几分钟),对于通过防火墙的所有 TCP 连接,如果在设定时间内没有任何活动,就会被防火墙拆除,这样就会导致连接中断。在拆除连接时,也不会向连接的两端发送任何数据来通知连接已经拆除。
以太网、集线器、交换机、电缆等出现故障。只有更换硬件才能正确诊断。