项目启动报数据库连接错误: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

你可能感兴趣的:(异常,mysql,java,jdbc,mybatis,数据库)