共计 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 行业资讯频道,更多相关知识等着你来学习!