解决navicat、本地、远程无法登录阿里云的mysql总结
问题1:项目无法通过远程连接阿里云的mysql。
本地登录可以,但是远程登录却报错
Host is not allowed to connect to this MySQL server
先说说这个错误,其实就是我们的MySQL不允许远程登录,所以远程登录失败了,解决方法如下:
在装有MySQL的机器上登录MySQL mysql -u root -p密码
执行use mysql;
执行update user set host = ‘%’ where user = ‘root’;这一句执行完可能会报错,不用管它。
执行FLUSH PRIVILEGES;
经过上面4步,就可以解决这个问题了。
问题2:项目可以远程访问阿里云的mysql,但是本地无法访问
我的照着上面的修改完后,发现本地的navicat无法连接阿里云的mysql了,本地通过xshell连接阿里云的linux,也无法通过连接mysql,直接在阿里云通过密码也无法登录mysql。显示被拒绝。
出现这个错误的原因可能有很多:
1、账号或密码不对。
2、没有权限:
- a.端口3306是否被防火墙挡住了
- b.ip是否被防火墙或者mysql的权限系统禁止了。
3、要注意localhost和127.0.0.1是两个不同的主机。
4、是否有密码。----------------我遇到的错误。**
因为mysql登录权限的这个问题,耗费了我两个小时来解决。
那么,如果再次遇到这个问题应该怎么解决呢?
我觉得最重要的是要认识mysql库下的user表。也就是下面的这张图。
use mysql;
select user,host,password from user;
这张表就是管理登录密码和权限的表。user是登录的账户,host表示可以登录的主机,localhost表示本机,127.0.0.1也是表示主机,但是他们是不互通的,%表示所有的ip主机都可以登录。password是密码。
可以看到上图中第一行的password是有一串字符串的,表示的是密码。
而其他行的密码都是空的,则表示不需要密码就可以登录。如果这些不需要密码的主机在登录时有密码,那么就会登不进。这也是我今天遇到的问题。只需要不输入密码就可以登录进去了,当然最好是要有密码。所有给root用户的对应的主机localhost添加密码,然后就可以通过密码登录了。
这是添加,密码后的状态: