MySQL远程连接报错问题,报“Communications link failure”错误

474 阅读1分钟

问题来源: 项目启动成功之后,但是通过接口controller访问dao数据库时报错,报错如下:

Caused bycom.mysql.cj.exceptions.CJCommunicationsExceptionCommunications link failure 
        The last packet sent successfully to the server was 0 milliseconds agoThe driver has not received any packets from the server.                                    

        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_352]                                                                    

        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_352]                                             

        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_352]                                     

        at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_352]                                                                          

        at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61) ~[mysql-connector-java-8.0.19.jar!/:8.0.19]                           

        at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) ~[mysql-connector-java-8.0.19.jar!/:8.0.19]                          

        at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151) ~[mysql-connector-java-8.0.19.jar!/:8.0.19]                          

        at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:167) ~[mysql-connector-java-8.0.19.jar!/:8.0.19]            

        at com.mysql.cj.protocol.a.NativeProtocol.readMessage(NativeProtocol.java:539) ~[mysql-connector-java-8.0.19.jar!/:8.0.19]                                  

        at com.mysql.cj.protocol.a.NativeProtocol.readServerCapabilities(NativeProtocol.java:491) ~[mysql-connector-java-8.0.19.jar!/:8.0.19]                       

        at com.mysql.cj.protocol.a.NativeProtocol.beforeHandshake(NativeProtocol.java:381) ~[mysql-connector-java-8.0.19.jar!/:8.0.19]                              

        at com.mysql.cj.protocol.a.NativeProtocol.connect(NativeProtocol.java:1338) ~[mysql-connector-java-8.0.19.jar!/:8.0.19]                                     

        at com.mysql.cj.NativeSession.connect(NativeSession.java:157) ~[mysql-connector-java-8.0.19.jar!/:8.0.19]                                                   

        at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:850) ~[mysql-connector-java-8.0.19.jar!/:8.0.19]                                 

        ... 82 common frames omitted                                                                                                                                

Caused byjava.io.EOFExceptionCan not read response from serverExpected to read 4 bytesread 0 bytes before connection was unexpectedly lost.                 

        at com.mysql.cj.protocol.FullReadInputStream.readFully(FullReadInputStream.java:67) ~[mysql-connector-java-8.0.19.jar!/:8.0.19]                             

        at com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:63) ~[mysql-connector-java-8.0.19.jar!/:8.0.19]                            

        at com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:45) ~[mysql-connector-java-8.0.19.jar!/:8.0.19]                            

        at com.mysql.cj.protocol.a.NativeProtocol.readMessage(NativeProtocol.java:533) ~[mysql-connector-java-8.0.19.jar!/:8.0.19]                                  

        ... 87 common frames omitted

使用日志中的内容搜索解决方案,从网上查找的解决方案:

  1. Driver版本过高(8.0),mysql版本过低(5+),替换之后依然没有用
  2. 认为是连接数过小,改成了连接池,无效
  3. 其他解决方案依然无效

换了搜索内容「MySQL远程连接失败」,最终找到了解决方案,解决方案如下:

  1. 外部网络ping MySQL服务器IP port
  2. 第一步不通,可能是防火墙问题,看下防火墙有没有开
  3. mysql服务器有没有起起来
  4. 检查mysql配置bind-address = 127.0.0.1
  5. 检查一下my.cnf(我这里的路径是:etc/mysql/my.cnf,我这里的my.cnf没有什么内容)
  6. 找/etc/mysql/mysql.conf.d/下的mysqld.cnf,将bind-address=127.0.0.1改成bind-address=0.0.0.0

附 my.cnf配置

!includedir /etc/mysql/conf.d/                                             
!includedir /etc/mysql/mysql.conf.d/                                          

附 修改后的mysqld.cnf部分配置

bind-address            = 0.0.0.0                                               
mysqlx-bind-address     = 127.0.0.1