问题描述
使用idea和datagrip连接云服务器上部署的MySQL数据库失败,使用的MySQL版本是8.0.30,报错:
[08S01]
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.
Communications link failure
我们自己部署MySQL服务器时可能会遇到各种各样的问题,所以这篇文推排查适合自己搭建MySQL的同学,耐心一步步排查,应该都会解决。
问题排查及分析
1.检查mysql驱动
由于idea和datagrip是Java编写的,所以需要使用Java驱动包。检查与mysql版本匹配的驱动包,我这里使用的是8.0.30版本,因为可以向下兼容,所以驱动包应该只高不低。
注意⚠️:我导入的是maven本地仓库中下载的驱动包,所以如果清空maven本地仓库缓存包的话这里也会被清除,最好单独放在一个稳定的路径下。
2.如果MySQL版本在8.0.13以后,注意修改useSSL=false
MySQL驱动在8.0.13以后默认开启了SSL,即useSSL=true,所以做以下修改
1.连接串后加&useSSL=true
2.驱动里的配置也修改为false
3.数据源配置也改为false
3.检查云服务器防火墙
主流云服务商阿里云或者腾讯云等,在安全配置中开放端口,一般都是3306。
4.检查MySQL配置文件
1.修改my.cnf文件中 bind-address
bind-address默认为0.0.0.0,即监听所有网络接口。如果想限制某些IP访问,就修改这个值。如果是127.0.0.1则只接收本地连接。云服务器这里修改为:
bind-address="0.0.0.0"
修改完记得重启MySQL。
2.如果有skip-networking这个配置,就注释掉它
如果有了这个配置就只能本地访问,不能远程访问。注释掉方式是在行前加#
5.给用户授权
新创建的用户需要给用户授权,否则访问不到。
#创建用户
CREATE USER 'your_user'@'your_ip_address' IDENTIFIED BY 'your_password';
#授权
GRANT ALL ON *.* TO 'your_user'@'your_ip_address';
FLUSH PRIVILEGES;
总结
以上步骤通常问题都能解决,认真一步步检查,通常最容易出现的问题就是自己以为检查过的地方其实被忽略了。我在云服务器防火墙这里栽了跟头,因为以前只给指定的其他服务器开了白名单,后来自己在本地连接的时候忘了这件事,以为防火墙没问题,又排查了好几个小时,非常浪费时间。总之还是细心点,千万不能想当然。