版权声明:如若转载,请联系作者。 https://blog.csdn.net/liu16659/article/details/85222705
程序报错com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
1. 报错
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet successfully received from the server was 2,682 milliseconds ago. The last packet sent successfully to the server was 2,674 milliseconds ago.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1127)
at com.mysql.jdbc.ExportControlled.transformSocketToSSLSocket(ExportControlled.java:104)
at com.mysql.jdbc.MysqlIO.negotiateSSLConnection(MysqlIO.java:5285)
at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1720)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1288)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2506)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2539)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2321)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:832)
2. 原因
上次我在运行这个程序的时候,还是好好的,为什么这次只是修改了一个主机名,就报错了?正当我十分不解的时候,网上的一篇博客说,出现这个错误是因为连接数据库的url写错了。我检查了一下我的url地址,如下:
public static String url = "jdbc:mysql://192.168.211.4:3306" +
"/mydatabase?useUnicode=true&characterEncoding=utf-8&useSSL=true";
然后我就恍然大悟了,虽然我的地址没有写错,但是我的某些选项写错了。
先看一下我的数据库:
mysql> show create database mydatabase\G
*************************** 1. row ***************************
Database: mydatabase
Create Database: CREATE DATABASE `mydatabase` /*!40100 DEFAULT CHARACTER SET latin1 */
1 row in set (0.00 sec)
发现其编码格式是默认的latin1
,而不是utf8
,所以可能导致在转换时就出现错误。修改my.cnf文件,然后重启mysql。再次执行这个程序,发现还是出现这个问题,一次次对url进行修改,最后排查到是因为&useSSL=true
这个选项对程序造成的影响。
3. 什么是useSSL
待更新。