解决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地址访问

本文完结!