mysql报错Communications link failure怎么办

63次阅读
没有评论

共计 2808 个字符,预计需要花费 8 分钟才能阅读完成。

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

一、问题

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

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

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-26发表,共计2808字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)