加入收藏 | 设为首页 | 会员中心 | 我要投稿 银川站长网 (https://www.0951zz.com/)- 云通信、基础存储、云上网络、机器学习、视觉智能!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql报错Communications link failure怎么操作

发布时间:2023-09-07 13:04:21 所属栏目:MySql教程 来源:
导读:这篇文章主要介绍了mysql报错Communications link failure怎么办,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、问题Exception in thread

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

一、问题

Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

Last packet sent to the server was 12 ms ago.

    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)

    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)

    at java.lang.reflect.Constructor.newInstance(Unknown Source)

    at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)

    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074)

    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3009)

    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2895)

    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3438)

    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1951)

    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2101)

    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2548)

    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2477)

    at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1422)

    at com.victor_01.Jdbc_test.main(Jdbc_test.java:29)

Caused by: java.net.SocketException: Software caused connection abort: recv failed

    at java.net.SocketInputStream.socketRead0(Native Method)

    at java.net.SocketInputStream.socketRead(Unknown Source)

    at java.net.SocketInputStream.read(Unknown Source)

    at java.net.SocketInputStream.read(Unknown Source)

    at com.mysql.jdbc.util.ReadAheadInputStream.fill(ReadAheadInputStream.java:113)

    at com.mysql.jdbc.util.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:160)

    at com.mysql.jdbc.util.ReadAheadInputStream.read(ReadAheadInputStream.java:188)

    at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:2452)

    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2906)

    ... 8 more

二、解决问题步骤

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

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

mysql > show global variables like 'wait_timeout'; 

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| wait_timeout  | 28800 |

+---------------+-------+

1 row in set (0.00 sec)

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驱动的版本。

(编辑:银川站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章