如果出现连接问题,如通信错误或中断连接,请使用以下信息来源诊断问题:
-
错误日志。见 第 7.4.2 节,“错误日志”。
-
通用查询日志。见 第 7.4.3 节,“通用查询日志”。
-
状态变量
Aborted_
和xxx
Connection_errors_
。见 第 7.1.10 节,“服务器状态变量”。xxx
-
主机缓存,使用性能模式
host_cache
表。见 第 7.1.12.3 节,“DNS 查找和主机缓存”,和 第 29.12.22.3 节,“主机缓存表”。
如果 log_error_verbosity
系统变量设置为 3,您可能在错误日志中找到类似以下的消息:
[Note] Aborted connection 854 to db: 'employees' user: 'josh'
如果客户端甚至无法连接,服务器将增加 Aborted_connects
状态变量。未成功的连接尝试可能是由于以下原因:
-
客户端尝试访问数据库但没有权限。
-
客户端使用了错误的密码。
-
连接包不包含正确的信息。
-
获取连接包需要超过
connect_timeout
秒。见 第 7.1.8 节,“服务器系统变量”。
如果这些事情发生,这可能表明有人正在尝试破解您的服务器!如果启用了通用查询日志,这些问题的消息将被记录到其中。
如果客户端成功连接但后来断开连接或被终止,服务器将增加 Aborted_clients
状态变量,并在错误日志中记录 中断连接 消息。可能的原因包括:
-
客户端程序在退出前没有调用
mysql_close()
。 -
客户端已经超过
wait_timeout
或interactive_timeout
秒没有向服务器发出任何请求。见第 7.1.8 节,“服务器系统变量”。 -
客户端程序在数据传输中突然结束。
中断连接或客户端中断的其他原因:
-
变量
max_allowed_packet
的值太小,或者查询需要的内存超过了为mysqld分配的内存。见第 B.3.2.8 节,“数据包太大”。 -
使用 Linux 的以太网协议,既有半双工又有全双工。一些 Linux 以太网驱动程序有这个 bug。你应该通过在客户端和服务器机器之间传输大文件来测试这个 bug。如果传输以突发-暂停-突发-暂停模式进行,你正在经历 Linux 双工症候群。将网络卡和交换机/集线器的双工模式切换到全双工或半双工,并测试结果以确定最佳设置。
-
线程库的问题导致读取中断。
-
TCP/IP 配置不正确。
-
以太网、集线器、交换机、电缆等硬件故障。只有通过替换硬件才能正确诊断。