MySQL文档阅读笔记之网络通信问题及中断的数据库连接

1,461 views

MySQL侧的诊断信息

当应用与MySQL数据库之间的通信出现问题比如连接错误或者异常中断时,可以通过查看如下信息来帮助问题诊断:

  • MySQL数据库运行期产生的error log。
  • MySQL数据库在响应外部请求时产生的general query log。
  • 使用show status命令查看Aborted_xxx和Connection_errors_xxx变量的值。
  • 检查host cache。

连接中断的现象及原因

如果客户应用与MySQL数据库在应用层成功的建立了通信链接,但未使用正确的方式关闭连接或者客户应用异常中止,那么MySQL数据库将增大Aborted_clients变量的值,并将这次事件写入error log。
可能的原因如下:

  • 客户应用退出前未调用方法来关闭数据库连接。
  • 客户应用与MySQL数据库之间建立的数据库连接长时间闲置,超出wait_timeout或者interactive_timeout变量定义的时间值,导致连接被MySQL数据库自动关闭。
  • 在客户应用与MySQL数据库交换数据的过程中,客户应用突然异常中止。

连接建立不成功的现象及原因

如果客户应用无法成功的与MySQL数据库建立连接,或者说无法成功得到数据库连接对象,那么MySQL数据库将会增大Aborted_connects变量的值,同时将把相关信息记录至general query log中。
可能的原因如下:

  • 客户应用没有获取访问MySQL数据库的特权。
  • 客户应用访问MySQL数据库时使用了错误的口令。
  • 客户应用使用数据库连接向MySQL数据库传递数据时,报文中包含了非法的信息。
  • 客户应用与MySQL数据库建立连接时,超出connect_timeout变量定义的时长后,仍然无法得到连接创建的报文。直白的解释,当TCP层三次握手成功之后,MySQL数据库等待至多connect_timeout变量定义的时长,如果仍然无法收到客户应用发送的建立数据库连接的请求,那么将回复Bad handshake,同时关闭连接。

MySQL数据库的管理员要特别关注此类问题,确认MySQL数据库是否受到了外部的攻击,比如DoS。

其它可能的原因

排除了前述的原因,那么需要进一步确认是否存在如下的问题。

  • 对于当前应用场景,max_allowed_packet变量的值过小,无法满足需要;或者查询请求需要的内存资源比较大,当前MySQL数据库的参数配置不能满足需要。
  • 网络问题,比如驱动的bug或者网络设备的配置问题。这时可以在客户应用及MySQL数据库所在的设备上执行大文件传输,确认双向的传输速率是否符合预期。
  • 底层线程库的Bug,影响并发读操作。
  • 操作系统的TCP/IP配置不正确或者低效。
  • 网络硬件问题,比如网卡、交换机、路由器工作不正常。


若非注明,均为原创,欢迎转载,转载请注明来源:MySQL文档阅读笔记之网络通信问题及中断的数据库连接

关于 JackieAtHome

基层程序员,八年之后重新启航

此条目发表在 MySQL, 笔记 分类目录,贴了 标签。将固定链接加入收藏夹。