java报错Communications link failure 该如何解决?
天蓬老师
天蓬老师 2017-04-18 10:52:26
0
2
567
  1. 就是普通的查询mysql数据库的代码:

  2. 错误栈如下:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2209)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:776)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:352)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:284)
    at java.sql.DriverManager.getConnection(DriverManager.java:571)
    at java.sql.DriverManager.getConnection(DriverManager.java:215)
    at testHttpConnection.util.DBUtil.getConn(DBUtil.java:26)
    at testHttpConnection.TestMysql.main(TestMysql.java:23)
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074)
    at com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:675)
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1078)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2137)
    ... 13 more
Caused by: java.net.SocketException: Permission denied: recv failed
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(SocketInputStream.java:152)
    at java.net.SocketInputStream.read(SocketInputStream.java:122)
    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:2494)
    at com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:599)
    ... 15 more
天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

répondre à tous(2)
PHPzhong

Laissez-moi partager la solution à cette erreur que j'ai eue auparavant, qui est différente du premier étage :

eclipse中,设置“Default VM arguments”添加:“-Djava.net.preferIPv4Stack=true”

La cause spécifique de l'erreur semble être due à des changements de configuration dans la jvm, qui empêchent la jvm d'obtenir certaines informations via le réseau

Ty80

Cela devrait résoudre votre problème :
Solutions à l'échec du lien de communication

Utilisez Connector/J pour vous connecter à la base de données MySQL. Après une exécution prolongée du programme, l'erreur suivante sera signalée :
Échec du lien de communication, le dernier paquet reçu avec succès du serveur était Il y a 🎜> millisecondes. Le dernier paquet envoyé avec succès au serveur remonte à millisecondes.

L'erreur vous demandera également de modifier wait_timeout ou d'utiliser l'attribut autoReconnect de Connector/J pour éviter cette erreur.
Après avoir vérifié certaines informations, j'ai constaté que de nombreuses personnes ont rencontré ce problème. La plupart d'entre elles ont ce problème lorsqu'elles utilisent la méthode du pool de connexions. Il devrait être difficile d'avoir ce problème avec des connexions courtes. La raison de ce problème :
Le "wait_timeout" par défaut du serveur MySQL est de 28 800 secondes ou 8 heures, ce qui signifie que si une connexion est inactive pendant plus de 8 heures, MySQL déconnectera automatiquement la connexion, mais le pool de connexions pense que la connexion Il est toujours valide (car la validité de la connexion n'a pas été vérifiée). Lorsque l'application demande à utiliser la connexion, cela provoquera l'erreur ci-dessus.
Modifiez les paramètres de MySQL. Le wait_timeout maximum est de 31536000 ou 1 an. Ajoutez à my.cnf :
[mysqld]
wait_timeout=31536000
interactive_timeout=31536000
Redémarrez pour prendre effet et doivent être modifiés en même temps.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal