问题来源: 项目启动成功之后,但是通过接口controller访问dao数据库时报错,报错如下:
Caused by: com.mysql.cj.exceptions.CJCommunicationsException: 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) ~[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 by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 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
使用日志中的内容搜索解决方案,从网上查找的解决方案:
- Driver版本过高(8.0),mysql版本过低(5+),替换之后依然没有用
- 认为是连接数过小,改成了连接池,无效
- 其他解决方案依然无效
换了搜索内容「MySQL远程连接失败」,最终找到了解决方案,解决方案如下:
- 外部网络ping MySQL服务器IP port
- 第一步不通,可能是防火墙问题,看下防火墙有没有开
- mysql服务器有没有起起来
- 检查mysql配置
bind-address = 127.0.0.1
- 检查一下my.cnf(我这里的路径是:etc/mysql/my.cnf,我这里的my.cnf没有什么内容)
- 找/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