MySQL 8报OperationalError: (1130, “XX‘ is not allowed to connect to this MySQL server“)的正确解决方法

(先吐槽一下,为啥CSDN博客的标题里的双引号和单引号总不能正常显示,这个太扯了)

这个博客也觉得挺无语的。由于实验需要,临时在一台笔记本上装了MySQL 8.0.22-0ubuntu0.20.04.3 (Ubuntu),结果发现不能从远程连接,报:

pymysql.err.OperationalError: (1130, "192.168.0.113' is not allowed to connect to this MySQL server") 这种错(我这里也不隐藏用户名密码IP之类的了,因为都是内网,也仅仅是为了做实验用),结果网上大部分教程是类似于这么说的:

2. 授权法。例如,你想myuser使用mypassword从任何主机连接到mysql服务器的话。 
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION; 
如果你想允许用户myuser从ip为192.168.1.3的主机连接到mysql服务器,并使用mypassword作为密码 
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.3' IDENTIFIED BY 
'mypassword' WITH GRANT OPTION; 

结果我尝试运行了:

GRANT ALL PRIVILEGES ON *.* TO 'vulclone'@'%' IDENTIFIED BY '1234' with grant option;

类似于这样的命令,结果MySQL报:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IDENTIFIED BY '1234' with grant option' at line 1

真的是太奇怪了,但是看网上的哥们都是这样说的,例如这里:https://blog.csdn.net/july_2/article/details/41896295

另外,像这里的底下评论也是这么说的:https://blog.csdn.net/weixx3/article/details/80782479

以及:https://www.cnblogs.com/xbxxf/p/9174028.html

又费劲找了找,终于发现了原因:https://blog.csdn.net/lizz2276/article/details/111312815

https://blog.csdn.net/a2814282061/article/details/108208070

而MySQL8.0及之后的,设置远程连接权限要用下面的语句才可以。

所以正确的做法如下(假设我想使用vulclone这个用户名,密码1234从内网中的任意IP访问):

create user vulclone@'%' identified by '1234';

grant all privileges on *.* to vulclone@'%' with grant option;

执行完了之后我们可以通过下列方法查看结果:

use mysql;

select host,user from user;

下面截图是我这里返回的结果:

注意最上面那个百分号才表示了可以从任意IP访问。当然,在尝试这些的同时我还进行了以下操作,所以有可能大家也需要都执行一下:

确定MySQL的端口是不是3306:

show global variables like 'port';

打开配置文件:

sudo gedit /etc/mysql/mysql.conf.d/mysqld.cnf

然后注释掉了这两个配置(这是注释以后的样子):

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
# bind-address		= 127.0.0.1
# mysqlx-bind-address	= 127.0.0.1

然后再重启了MySQL服务(不确定是不是必须要重启,但是这些步骤都尝试过一遍):

service mysql restart

说实话,MySQL这个update还是挺坑的。

如果大家也用Python,可以用类似于下面的代码检查是否配置成功:

import pymysql

conn = pymysql.connect(host="192.168.0.123",user="vulclone",password="1234",database="vulclonedb",charset="utf8")
cursor = conn.cursor()
sql = "SELECT current_user;"
cursor.execute(sql)
ret = cursor.fetchone()
print(ret)
cursor.close()
conn.close()

另外,在Ubuntu上彻底删除MySQL可以参考这里:https://www.cnblogs.com/duolamengxiong/p/13650684.html

查看本机的IP可以参考这里:https://blog.csdn.net/zhangvalue/article/details/80270169

  • 14
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值