解决服务器连接错误Host ‘XXX’ is not allowed to connect to this MySQL server

£神魔★判官ぃ 2023-05-28 08:24 103阅读 0赞

一、问题描述:

1、远程服务器安装了mysql服务并且启动成功,在本地可以进行自由的访问和更新等操作
2、服务器已开通了远程访问服务器3306端口的权限并且通过netstat -ltnp命令查看3306处于监听过程中
3、远程通过工具链接该mysql数据库会报Host ‘xxx.xxx.xxx.xxx’(本地ip) is not allowed to connect to this MySQL server 的错误

二、原因

MySQL 没有开放远程登录的权限。

三、解决办法

1、远程链接服务器,在服务器内mysql系统目录下的/bin文件下执行./mysql -u root -p;输入密码登入mysql;
2、在mysql中执行use mysql命令,进入系统数据库
3、在mysql数据库中执行 select host from user where user = ‘root’;如果返回结果如下图:
在这里插入图片描述
该结果表示是由于当前的root用户限制在当前的内网ip内访问的,需要修改他的访问域。
4、在mysql数据库中执行 update user set host = ‘%’ where user = ‘root’;
5、执行完成后通过命令 service mysql restart 来重启mysql数据库。
(如果上面还未生效,请执行:flush privileges;这个命令是刷新MySQL的权限相关表)

四、附录

上面主要针对于root登录,如果想单独可查看操作某个数据库,方法如下

1、登陆mysql

2、创建远程登陆用户并授权,在要链接的服务器上操作

  1. mysql> grant all PRIVILEGES on db_name.* to 'username'@'xxx.xxx.xx.x' identified by 'password' WITH GRANT OPTION;

上面的语句表示将数据库 db_name 的所有权限授权给 username 这个用户,允许 username 用户在 xxx.xxx.xx.x 这个 IP 进行远程登陆,并设置 username 用户的密码为 password。

分析参数:

  • all PRIVILEGES 表示赋予所有的权限给指定用户,这里也可以替换为赋予某一具体的权限,例如:select,insert,update,delete,create,drop 等,具体权限间用“,”半角逗号分隔。
  • db_name.* 表示上面的权限是针对于哪个表的,db_name指的是数据库名称,后面的 * 表示对于所有的表,由此可以推理出:对于全部数据库的全部表授权为“.”,对于某一数据库的全部表授权为“数据库名.*”,对于某一数据库的某一表授权为“数据库名.表名”。
  • username表示你要给哪个用户授权,这个用户可以是存在的用户,也可以是不存在的用户。
  • xxx.xxx.xx.x 表示允许远程连接的 IP 地址,你的IP,如果想不限制链接的 IP 则设置为“%”即可。
  • password 为用户username的密码。

发表评论

表情:
评论列表 (有 0 条评论,103人围观)

还没有评论,来说两句吧...

相关阅读