MySQL无法通过本地ip地址进行访问

目录

一、问题背景

1.1 环境说明

二、原因排查

三、解决办法

四、文章总结

五、参考文章



一、问题背景

在本机部署了MySQL服务,在虚拟机中启动Web应用。但是在应用启动的过程中提示无法连接到宿主机的MySQL数据库。

1.1 环境说明

宿主机:Win10专业版
虚拟机:VitrualBox
虚拟机OS:Ubuntu18.04

二、原因排查

在Navicat中使用固定ip地址创建数据库连接,结果报了如下错误:

1045 - Access denied for user 'root'@XXXX'(using password: YES)

我使用root用户进行的登录,因为MySQL部署在宿主机上,所以按道理是可以正常访问的。

using password: YES 可知:

输入的密码是正确的

那么,可能的原因:

没有相关的权限

所以,首先想到的就是为这个用户赋权(主机名localhost登录):


grant all PRIVILEGES on *.* to 'root'@'%';

但是Navicat报错了。错误信息如下:


grant all PRIVILEGES on *.* to 'root'@'%'
> 1410 - You are not allowed to create a user with GRANT

上面的命令是什么意思呢?

  • grant:赋权命令
  • all PRIVILEGES:当前用户的所有权限
  • on:介词,和后面的*.*结合使用
  • *.*:点前面是数据库,后面是表。本命令表示所有数据库和表
  • to:介词,用于限定后面的 'root'@'%'
  • ‘root’@’%’:权限赋给root用户,所有ip都能连接。@前面是用户名,后面是可以从哪些ip地址连接,如果设置%表示所有ip地址都能连接

另外报错:“you are not allowed to create user with grant ”,又告诉了我们什么信息呢?

它的意思是:不允许使用grant的方式创建用户

难道当前用户没有grant的权限?

那么,排查下root用户是否有grant_priv 权限,而这些信息在`mysql`.user表中都有:


select user, grant_priv, host 
from `mysql`.user;

执行结果如下:

也就是说:

1. root用户有 赋权的权限 => grant_priv列为Y
2. root的 host只有localhost => 意味着不可以通过ip+端口的方式(以root用户登录)访问MySQL数据库

既然root用户有赋权的权限,为什么还会提示:“you are not allowed to create user with grant”  呢?

原因如下:

 当一个用户自己的登录host为localhost时,是不允许授权别的用户通过非localhost进行登录的。

三、解决办法

以root身份(先通过localhost登录Navicat)执行下面的sql:


-- 1.更新root用户的host为%
update `mysql`.`user`set host='%' where user='root';

-- 2.刷新权限
flush privileges;

注:这里一定不能忘了步骤2,否则即使数据更新了,也是不生效的。 

此时,就可以通过本地ip+端口的方式登录MySQL了

至此,本地的MySQL数据库无法通过ip地址访问的问题解决了!!!

perfect!!!

四、文章总结

本文描述了无法通过ip地址访问MySQL数据库的问题,然后根据报错信息中的“using password: YES”,排除了密码错误的因素。

后面打算给root用户赋权限,使其可以从任意ip地址进行连接。但是在赋权的过程中提示:“you are not allowed to create user with grant”,原因是root用户自己的登录host就是localhost,是无法给其他用户设置其他的登录host(非localhost)的。

问题的解决只能借助于修改`mysql`.user表中的host字段,将其值设置为%,表示某个用户可以在任意主机上进行登录。

同时我们还发现一个有趣的现象:如果`mysql`.user表中的host字段为localhost即使用户在数据库服务器本地登录,也不可以Navicat的host设置为本地的ip地址必须为localhost才可以正常登录

五、参考文章

you are not allowed to create user with grant

mysql8.0数据库添加用户和授权

Access denied for user root@'localhost'...

Access denied for user 'root'@'xxx.xxx.xxx.xxx'

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值