JDBC数据库连接本地数据库的报错问题:Communications link failure

关于jdbc数据库编程连接本地数据库的异常报错,我找了三天才找到根本原因;现分享给各位菜鸟,少走弯路。

我在做mybatis项目整合数据库时,运行时报错:

看报错原因就是数据库驱动问题;检查数据库连接配置,没有问题。

于是网上查找资料,答案都大概一样,我试了下,还是不行。

然后我手写一个简单的jdbc数据库测试本地连接,看看是否连接上:

手写一个简单的数据库连接也是连接不上,总是报错:Communications link failure;意思是:通信链路异常;也就是底层通信异常,然后下面又说the last package.....................;服务器没有收到数据库的包。

网上查找资料排查:

第一步:

1,先开mysql,输入        show global variables like 'wait_timeout';   这句,就会显示出时间了,

mysql show global variables like 'wait_timeout'; 

+---------------+---------+ 

| Variable_name | Value | 

+---------------+---------+ 

| wait_timeout | 28800 | 

+---------------+---------+ 

1 row in set (0.00 sec) 

解释:Mysql服务器默认的“wait_timeout”是8小时,也就是说一个connection空闲超过8个小时,Mysql将自动断开该connection。这就是问题的所。将会造成上面的异常。

2 set global wait_timeout=604800; 

3 set global interactive_timeout=604800;

当我输入这些命令后,重新启动数据库连接,发现报错,还是通信链路问题。

第二步:排查数据库的版本号和数据库安装包jar包的版本号是否一致:

进入数据库输入命令:select version();

查看当前的数据库版本号;数据库版本号是8.0.15;jar包:mysql-connection-java-8.0.15-jar

两个包也没问题,重新测试,也报同样的错误。

第三步:网上的资料查了还是没有用,解决不了问题,很恼火,我就静静地想问题既然是数据库通信链路异常,又显示服务器没有收到任何的数据库驱动包,就说明文件没有加载,文件没有加载就是拦截了或者是找不到,我就把防火墙关闭掉,重新测试;结果是报错,不是通信链路错误,心中大喜,哈哈哈,就是数据库拒绝访问,就说明数据库密码错误;我重新进入数据库设置新的密码,然后再测试,也报错,密码错误,由于我之前解决这个问题的时候,设置了很多密码,导致密码混淆,于是卸载数据库,卸载数据库要输入命令行(见下图)。重新下载,安装。

sudo rm /usr/local/mysql 

sudo rm -rf /usr/local/mysql*

sudo rm -rf /Library/StartupItems/MySQLCOM

sudo rm -rf /Library/PreferencePanes/My*

rm -rf ~/Library/PreferencePanes/My*

sudo rm -rf /Library/Receipts/mysql*

sudo rm -rf /Library/Receipts/MySQL*

sudo rm -rf /var/db/receipts/com.mysql.*

安装的时候密码设置好,开启数据库,然后在jdbc数据库配置里面改一下密码和用户名;进行测试,没有报错。问题解决,如下图:

看到了成功的喜悦。这坑太深了:根本主要原因是防火墙要关闭。为什么要关闭,时间有限后续研究补上。

发布了8 篇原创文章 · 获赞 4 · 访问量 1462

猜你喜欢

转载自blog.csdn.net/qq_41907816/article/details/89104699