这篇文章主要介绍了mysql报错Communications link failure怎么办,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

一、问题

Exceptioninthread"main"com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:CommunicationslinkfailureLastpacketsenttotheserverwas12msago.atsun.reflect.NativeConstructorAccessorImpl.newInstance0(NativeMethod)atsun.reflect.NativeConstructorAccessorImpl.newInstance(UnknownSource)atsun.reflect.DelegatingConstructorAccessorImpl.newInstance(UnknownSource)atjava.lang.reflect.Constructor.newInstance(UnknownSource)atcom.mysql.jdbc.Util.handleNewInstance(Util.java:406)atcom.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074)atcom.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3009)atcom.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2895)atcom.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3438)atcom.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1951)atcom.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2101)atcom.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2548)atcom.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2477)atcom.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1422)atcom.victor_01.Jdbc_test.main(Jdbc_test.java:29)Causedby:java.net.SocketException:Softwarecausedconnectionabort:recvfailedatjava.net.SocketInputStream.socketRead0(NativeMethod)atjava.net.SocketInputStream.socketRead(UnknownSource)atjava.net.SocketInputStream.read(UnknownSource)atjava.net.SocketInputStream.read(UnknownSource)atcom.mysql.jdbc.util.ReadAheadInputStream.fill(ReadAheadInputStream.java:113)atcom.mysql.jdbc.util.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:160)atcom.mysql.jdbc.util.ReadAheadInputStream.read(ReadAheadInputStream.java:188)atcom.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:2452)atcom.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2906)...8more


二、解决问题步骤

  1.检查你的数据库连接地址(配置文件中的url)是否正确.

  2.有可能是由mysql5数据库的配置引起的。mysql5将其连接的等待时间(wait_timeout)缺省为8小时。在其客户程序中可以这样来查看其值:

mysql>showglobalvariableslike'wait_timeout';+---------------+-------+|Variable_name|Value|+---------------+-------+|wait_timeout|28800|+---------------+-------+1rowinset(0.00sec)

28800 seconds,也就是8小时,如果在wait_timeout秒期间内,数据库连接(java.sql.Connection)一直处于等待状态,mysql5就将该连接关闭。这时,你的Java应用的连接池仍然合法地持有该连接的引用。当用该连接来进行数据库操作时,就碰到上述错误。

解决方式:

  2.1.mysql5以前的版本可以直接在jdbc连接url的配置中附加上“autoReconnect=true”。

  2.2.将mysql的全局变量wait_timeout的值修改为最大。查看mysql5的手册,发现windows和linux下wait_timeout的最大值分别是24天和365天。

    (1).在文件my.ini的最后增加一行:wait_timeout=1814400。(该文件,windows下在mysql的安装目录下,linux下位置为/etc/my.ini)

    (2).重启mysql。

  3.如果经过了以上的步骤,你的问题依旧没有的到解决,则建议你修改下你程序中的mysql驱动的版本。

感谢你能够认真阅读完这篇文章,希望小编分享的“mysql报错Communications link failure怎么办”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!