关于数据库连接失败的问题
问题:使用Druid数据库连接池链接本地数据库,当链接为localhost时可以链接上,但是使用IP就链接失败。
eclipse控制台信息:
[ERROR] 2018-07-09 22:22:50,225 method:com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1997)
create connection error, url: jdbc:mysql://192.168.94.68:3306/ spider?characterEncoding=utf-8, errorCode 1130, state HY000
java.sql.SQLException: null, message from server: "Host 'LAPTOP-U2SOLH1E' is not allowed to connect to this MySQL server"
可能原因:
1、IP地址错误,导致访问不到数据库。
2、访问的数据库不存在,导致链接失败。
3、数据库对其他IP访问禁止。
原因分析:
从错误信息可以看出来这是第三个原因,数据库不允许这个IP进行访问。说明数据库没有开启其他IP登录的权限。
所以主要解决方案应该是从数据库的登录权限上下手。期间我将本机的IP改了很多次都是一样的错误,说明是数据库的
权限没有开启,并不在于是哪个IP出问题。
解决方案:开启数据库远程登录权限。
如下图:
在doc命令窗口下进入数据库:mysql -uroot -p
进入数据库后输入命令:
1 grant all privileges on *.* to ‘root’@'%' identified by "password" with grant option;
回车
即可开启任意IP使用用户名为root,密码为password远程登录数据库。
最后刷新权限。
1 flush privilege;
至此OK,搞定。再次运行程序,正常访问数据库
随增命令详解:
1、grant all privileges :表示授予所有的权利;如果需要授予一部分权利可以这样写:
grant select,insert,update ON。。。
2、on *.*:表示所有的库和表都授权;如果需要授予一部分库,可以直接把库名写进来:
ON TEST-DB ;
3、to 用户名:表示给哪个用户授权,这里我给的是root用户,如果授权给其他用户可以写其他用户名:
to test-user;
4、@‘%’:表示任意的IP地址都可以访问。如果需要限定某个IP访问可以具体写上:
@"172.16.16.152"
5、identified by '登录密码':表示mysql数据库会识别‘登录密码’作为此用户的远程登录密码。