程序报错`com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure`

版权声明:如若转载,请联系作者。 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

待更新。

猜你喜欢

转载自blog.csdn.net/liu16659/article/details/85222705