解决服务器连接错误Host ‘XXX’ is not allowed to connect to this MySQL server
一、问题描述:
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、创建远程登陆用户并授权,在要链接的服务器上操作
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的密码。
还没有评论,来说两句吧...