由于底层异常导致MySQL Communications链接失败

时间:2011-10-26 00:04:07

标签: java mysql tomcat jdbc eofexception


我正面临着这样烦人的问题,
使用TomcatJDBC Lib在Tomcat 6和MySQL上运行。

com.mysql.jdbc.CommunicationsException: 

由于潜在异常导致通信链接失败:

** BEGIN NESTED EXCEPTION ** 

java.io.EOFException

STACKTRACE:

java.io.EOFException
    at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1934)
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2380)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2909)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1600)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1695)
    at com.mysql.jdbc.Connection.execSQL(Connection.java:3026)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1137)
    at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1231)

经过一段时间(20分钟)后,所有与db的连接似乎都会过期。

autoReconnect=true" 
validationQuery="Select 1"

一切都已确定 我确实处理重新连接到数据库,它工作正常,但巨大的日志文件是坏的,我不能处理此异常,使其保持沉默。此类“固定”也不是正确的解决方案。有没有办法:
a)默默处理这个例外 b)修复此问题(我没有任何我知道的防火墙)(无法访问my.cnf进行mysql配置)

在完全不同的应用程序上使用Apache jConnector在Tomcat 5上出现此问题,没有任何防火墙可能会断开连接。

(在调用连接的方法上捕获EOFException或CommunicationsException当然没有帮助。)

提前致谢。

3 个答案:

答案 0 :(得分:2)

a)停止MySQL数据库服务器和应用程序服务器(Tomcat或其他)。

b)Mysql设置:这应该在mysql文件夹下的“my.ini”文件中完成。

wait_timeout = 1200(即20分钟 - 保持防火墙或任何其他第三方软件的同一时间)

您可以通过上述查询设置数据库级别。设置wait_timeout = 1200;

按上述查询查看设置显示“wait_timeout”;

等变量

c)在“Torque.properties”文件中添加两个属性。

minEvictableIdleTimeMillis连接在池中保持空闲的时间(以毫秒为单位)

    torque.dsfactory.csa.pool.minEvictableIdleTimeMillis = 1100000

#timeBetweenEvictionRunsMillis驱逐线程运行之间以毫秒为单位的时间;必须大于0;默认为-1

  torque.dsfactory.csa.pool.timeBetweenEvictionRunsMillis = 2000


    d) Start application and db server

答案 1 :(得分:1)

您需要在资源中的server.xml文件中设置MaxIdle和Timeout属性。

答案 2 :(得分:1)

使用命令/ s检查MYSQL的状态 现在检查您在代码中提到的端口号,该端口号应与MYSQL端口匹配 如果端口号不同则改变它

(JDBC:MySQL的://本地主机:3306 / MRT) 在这个例子中,我的端口号是3306