You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地开发环境下MySQL突然断开连接的问题排查求助

MySQL突发连接断开(EOFException)排查与解决

环境信息

  • 后端技术栈:Java
  • 前端技术栈:JSP、jQuery、HTML、CSS
  • 数据库版本:MySQL Ver 14.14 Distrib 5.7.28, for macos10.14 (x86_64)
  • 应用服务器:Apache Tomcat 8.5

报错信息

连接断开时抛出如下异常:

com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: 

** BEGIN NESTED EXCEPTION ** 

java.io.EOFException

STACKTRACE:

java.io.EOFException
    at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1913)
    at com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:501)
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:971)
    at com.mysql.jdbc.Connection.createNewIO(Connection.java:2644)
    at com.mysql.jdbc.Connection.<init>(Connection.java:1531)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)
    at java.sql.DriverManager.getConnection(DriverManager.java:664)
    at java.sql.DriverManager.getConnection(DriverManager.java:208)
    at com.vitgusa.vedi.util.DBUtils.newConnection(DBUtils.java:50)
    at org.apache.jsp.proc.error_jsp._jspService(error_jsp.java:145)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:476)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at com.vitgusa.vedi.util.XSSFilter.doFilter(XSSFilter.java:40)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:660)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:798)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:808)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:750)


** END NESTED EXCEPTION **



Last packet sent to the server was 0 ms ago.
    at com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:569)
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:971)
    at com.mysql.jdbc.Connection.createNewIO(Connection.java:2644)
    at com.mysql.jdbc.Connection.<init>(Connection.java:1531)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)
    at java.sql.DriverManager.getConnection(DriverManager.java:664)
    at java.sql.DriverManager.getConnection(DriverManager.java:208)
    at com.vitgusa.vedi.util.DBUtils.newConnection(DBUtils.java:50)
    at org.apache.jsp.proc.error_jsp._jspService(error_jsp.java:145)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:476)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at com.vitgusa.vedi.util.XSSFilter.doFilter(XSSFilter.java:40)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:660)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:798)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:808)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:750)
com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: 

当前MySQL配置(my.cnf)

sql-mode=""
#skip-networking
bind-address="127.0.0.1"
#wait_timeout=300
#interactive_timeout = 300

排查与解决方案

1. 定位MySQL进程崩溃原因

  • 查看MySQL错误日志:执行mysqladmin variables | grep log_error获取日志路径,检查崩溃前是否存在表损坏、内存溢出、线程死锁等异常记录。
  • 监控系统资源:用top或Activity Monitor观察MySQL的CPU、内存占用,确认是否因资源耗尽被系统强制终止;查看系统日志/var/log/system.log,搜索mysql、kill、memory关键词,排查是否有OOM(内存不足)杀进程的情况。

2. 修复连接管理漏洞

  • 检查DBUtils.newConnection实现:若每次请求都通过DriverManager新建连接且未正确关闭,会导致连接泄露,耗尽MySQL连接数甚至引发进程异常。
  • 替换为连接池:使用HikariCP、C3P0等连接池组件,自动处理连接复用、超时回收与健康检查,避免手动管理连接的疏漏。

3. 调整连接超时配置

启用并合理调整my.cnf中的超时参数:

wait_timeout=3600
interactive_timeout=3600

修改后重启MySQL,避免闲置连接被MySQL主动断开后客户端未感知引发的通信异常。

4. 验证JDBC驱动兼容性

当前使用的com.mysql.jdbc.Driver为旧版驱动,MySQL 5.7建议搭配mysql-connector-java 5.1.47及以上版本,或升级到com.mysql.cj.jdbc.Driver(8.0系列驱动,向下兼容5.7),旧驱动可能存在与MySQL 5.7通信协议不兼容的问题,导致突发断开。

5. 检查数据库完整性与版本

  • 执行mysqlcheck --all-databases检查所有数据库表是否损坏,表损坏可能触发MySQL进程崩溃。
  • 升级MySQL到5.7系列最新稳定版(如5.7.44),修复旧版本存在的已知进程崩溃bug。

6. 排查系统网络问题

  • 断开时执行telnet 127.0.0.1 3306测试本地端口连通性,确认是否有防火墙或网络配置临时拦截MySQL端口。

内容的提问来源于stack exchange,提问作者Halit Ciftci

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 21:24:24