찾다

 >  Q&A  >  본문

java报错Communications link failure 该如何解决?

  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
天蓬老师天蓬老师2803일 전577

모든 응답(2)나는 대답할 것이다

  • PHPz

    PHPz2017-04-18 10:54:26

    1층과 다른 이전에 발생한 오류에 대한 해결 방법을 공유해 드리겠습니다.

    으아아아

    오류의 구체적인 원인은 jvm의 구성 변경으로 인해 jvm이 네트워크를 통해 일부 정보를 얻을 수 없기 때문인 것 같습니다

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-18 10:54:26

    이렇게 하면 문제가 해결됩니다.
    통신 링크 오류에 대한 솔루션

    Connector/J를 ​​사용하여 MySQL 데이터베이스에 연결합니다. 프로그램이 오랫동안 실행되면 다음 오류가 보고됩니다.
    통신 링크 실패, 서버에서 성공적으로 수신된 마지막 패킷은 밀리초 전. 서버에 성공적으로 전송된 마지막 패킷은 밀리초 전입니다.

    이 오류를 방지하려면 wait_timeout을 수정하거나 Connector/J의 autoReconnect 속성을 사용하라는 메시지도 표시됩니다.
    몇 가지 정보를 확인해 보니 이런 문제를 겪은 분들이 꽤 많은 것으로 나타났습니다. 대부분 연결 풀 방식을 사용하면 이런 문제가 발생하기 어려울 것입니다. 이 문제의 원인:
    MySQL 서버의 기본 "wait_timeout"은 28800초 또는 8시간입니다. 즉, 연결이 8시간 이상 유휴 상태인 경우 MySQL은 자동으로 연결을 끊지만 연결 풀은 이를 생각합니다. 연결이 여전히 유효합니다(연결의 유효성이 확인되지 않았기 때문에). 응용 프로그램이 연결을 사용하도록 적용하면 위의 오류가 발생합니다.
    MySQL의 매개변수를 수정하세요. 최대 wait_timeout은 31536000 또는 1년입니다. my.cnf에 추가하세요.
    [mysqld]
    wait_timeout=31536000
    interactive_timeout=31536000
    적용하려면 다시 시작하세요. 이 두 매개변수를 동시에 수정해야 합니다.

    회신하다
    0
  • 취소회신하다