项目启动报数据库连接错误:com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure解决办法

echo编辑整理,欢迎转载,转载请声明文章来源。


将项目拉下来之后,发现启动报如下错误:
 Access denied for user 'root'@'localhost' (using password YES)
  • 这个错误说明数据库没有开放外部链接,密码是正确的,开放外部权限即可
解决办法
# 开放权限
# 登录mysql
mysql -u root -p
# 开放外部访问权限
ALTER USER 'admin'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
# 注意这里很有可能报错,因为很有可能你的用户默认是root或者是以前创建过的docker镜像的用户,这里可以先查看'%'对应的用户是啥
- ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'%'
# 查看'%'用户
use mysql
select user,host from user;
# 开放外部访问权限,根据查询出来'%'对应的用户设置
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%'  IDENTIFIED BY '123456'  WITH GRANT OPTION;
# 刷新权限
flush privileges;
出现如下错误:
com.mysql.cj.jdbc.exceptions.CommunicationsException: 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 com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174) ~[mysql-connector-java-8.0.18.jar:8.0.18]
	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) ~[mysql-connector-java-8.0.18.jar:8.0.18]
	at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:836) ~[mysql-connector-java-8.0.18.jar:8.0.18]
    ……
Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure
解决办法
# 先排除yml配置的数据库连接问题,最关键的几个点有:
- driver-class-name: com.mysql.jdbc.Driver

# 查看数据库是否有开放权限
- use mysql
  select user,host from user;
看看查询出来的用户名称对应的host是不是有开发对应的ip,或者干脆所有连接都可以的代表值"%"

# 查看mysql的版本和mysql-connector-java是否匹配
mysql5.7以前用5.1,5.7以后用8.0

# 如果还不行的话,试着加一个连接池试试

# 到这里还没解决的话,建议你把项目重新拉一遍,并且把mysql重新安装,很有可能是mysql的版本导致的,之前也碰到过版本bug
这个错误通常是由于JDBC驱动程序无法连接到MySQL数据库引起的。这可能是由于以下原因之一: 1. MySQL服务器未运行 2. MySQL服务器未在指定端口上运行 3. 防火墙阻止了连接 4. MySQL服务器配置不正确 以下是一些可能有助于解决此问题的步骤: 1. 确保MySQL服务器正在运行,并且正在监听正确的端口。可以使用以下命令检查MySQL服务器是否正在运行: ```shell sudo systemctl status mysql ``` 如果MySQL服务器未运行,则可以使用以下命令启动它: ```shell sudo systemctl start mysql ``` 2. 确保MySQL服务器正在监听正确的端口。默认情况下,MySQL服务器在端口3306上运行。可以使用以下命令检查MySQL服务器是否正在监听该端口: ```shell sudo netstat -tlnp | grep 3306 ``` 如果MySQL服务器未在该端口上运行,则可能需要编辑MySQL服务器配置文件以更改端口号。 3. 检查防火墙设置以确保允许MySQL服务器的连接。可以使用以下命令检查防火墙设置: ```shell sudo ufw status ``` 如果防火墙正在运行并且未允许MySQL服务器的连接,则可以使用以下命令打开MySQL服务器的端口: ```shell sudo ufw allow 3306/tcp ``` 4. 检查MySQL服务器配置以确保它正确地配置为接受来自JDBC驱动程序的连接。可以检查MySQL服务器的配置文件(通常位于/etc/mysql/mysql.conf.d/mysqld.cnf)以查看是否存在以下行: ```shell bind-address = 127.0.0.1 ``` 如果存在,则将其更改为以下内容: ```shell bind-address = 0.0.0.0 ``` 然后重新启动MySQL服务器以使更改生效: ```shell sudo systemctl restart mysql ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xlecho

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值