解决java.sql.SQLException: null, message from server: "Host xxx' is not allowed to connect to this MySQL server异常
一、背景描述二、原因排查2.1 防火墙设置2.2 数据库本身2.3 结论 三、解决方案3.1 Windows系统3.2 Linux系统 四、知识拓展
一、背景描述
Spring Boot + MySQL
本机访问MySQL数据库正常(即使用 localhost 或者 127.0.0.1 两种方式)。局域网内同事的电脑访问我电脑的数据库结果报错。用户使用的是root用户,即超管账户。
java.sql.SQLException: null, message from server: "Host 'WIN10-194.cloud.lxkj.com' is not allowed to connect to this MySQL server"
二、原因排查
2.1 防火墙设置
查看防火墙设置,是否允许远程访问mysql数据库这个程序。经查看本机确实限制了不允许远程访问msyql这个程序。于是把防火墙设置成可以允许访问本机电脑上的MySQL程序。
同事再次使用以下命令:
telnet 172.xx.xx.26 3306
结果还是不通。在我本机使用 IP 访问自己电脑上的MySQL数据库,结果同样报上述错误。
如果自己无法控制服务器,那么需要请运维同学帮忙查看,检查MySQL服务器的防火墙设置,是否限制3306端口,可通过telnet方式,在web服务器上测通MySQL服务器上的端口是否测通。经过上述操作如果没有问题,则服务器本身的ip或者端口限制的情况可以基本排除。
2.2 数据库本身
使用以下SQL语句,查看数据库 root 用户信息:
use mysql;select user,host from user;
2.3 结论
经过上述原因排查,可以确定,这个问题的原因是数据库只允许 localhost 或 127.0.0.1 访问,不允许远程访问导致的。
三、解决方案
3.1 Windows系统
使用以下SQL语句,可以在数据库管理连接工具,变更用户的访问方式:
use mysql;select user,host from user;update user set host = '%' where user = 'root'
最后一步就是把你的MySQL服务重启,一定要重启!(任务管理器 --> 服务 搜索 mysql,右键重启即可)
3.2 Linux系统
步骤一:打开cmd,进入mysql
mysql -uroot -p
步骤二:查看root用户的信息
use mysql;select user,host from user;
步骤三:修改root用户的被限制的ip范围,改为不限制,及允许所有ip访问
update user set host = '%' where user = 'root'
步骤四:将权限更新操作刷新到内存中,而不用下次启动时生效
flush privileges;
之后再通过web服务器上的代码,访问数据库,果然好了。
四、知识拓展
host=% 含义,%是通配符,host标识是设置允许访问的ip地址。
例如: * host=localhost只允许本机访问 * host=172.77.18.%只允许172.77.18.网段的可以访问 * host=%允许所有ip地址访问
本文完结!