使用JDBC时,无法连接远程MySQL数据库

“欢迎勾搭心月小姐姐,了解近期开班”

问题今天连接MySQL的时候,程序很久没有反应,在过了几分钟后向我抛出了一堆异常:

解决过程

异常的大概意思就是无法从数据库获得连接,所以:

1. 我首先去检查了数据库配置文件中的用户名、密码和url等信息,确保了自己没有手残地多打了几个空格,检查了几遍后,发现配置文件是没有问题的。

2. 在确保我的配置信息完全没有问题的情况下,我又想到可能我的数据库的用户权限可能存在问题,于是我去检查了用户的权限: SQL语句为: test为用户名,%为host。

可以看到,test用户拥有对test数据库的所有权限。

3. 这时候我就很懵逼了,想不到哪里出了问题,之前也连接过很多次,为啥会出问题呢?仔细想了想,这次和之前的唯一不同就是,这次连接的是远程的MySQL,之前连接的都是本机的MySQL,于是我就想到是不是远程的防火墙禁止外部访问呢?于是去查询了远程主机的防火墙状态:

可以看到,防火墙并没有拦截的规则。

4. 很气,哈哈哈。这真是奇怪啊,想了几遍,还是没有头绪,突然聪明的小脑瓜灵光一闪,我打算使用Navicat(图形化连接数据库工具)连接一下远程的数据库,看看到底是哪里的问题。

成功的报了错,我很开心,毕竟证明程序没有问题,而且有了错误编号,于是就去搜索相关问题。有人说这个错误可能是MySQL服务没有启动,吓得我瑟瑟发抖,这本应该是我首先想到的问题,赶紧去检查了下MySQL 的状态:

虚惊一场,我就说么,怎么会犯这种错误。

5. 没办法了,是时候祭出我的大法器啦——从官网找到文档,又找到了连接错误出现的地方。点击连接可以直达。

从文档中发现一段话,和我的问题高度吻合。

于是我去查看了下MySQL的配置文件:

注意红框里的bind-address=127.0.0.1,这是MySQL的msyql默认设置。这时候我,们看一下MySQL的端口情况:

好像发现了些问题,注意我红框里的127.0.0.1,这里就是问题的原因。这个稍后再解释,我们先把bind-addrss=12.70.0.1注释掉,重启MySQL,再次连接,连接成功!!

这时候我们看一下MySQL的端口情况:

此时的Local Address已经从127.0.0.1–>0.0.0.0这就表示,从外部访问数据库时可以通过和本机的任何ip进行通信,而不是本地回环ip127.0.0.1。

总结

关于bind-address为127.0.0.1是MySQL的默认设置,这样的设置会阻止远程的数据库连接。所以当你要从远程访问MySQL的时候,再MySQL的配置文件中可以把这一行注释掉,或者把127.0.0.1换成你客户端的ip。

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180130B0WWYS00?refer=cp_1026

扫码关注云+社区