解决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表。也就是下面的这张图。

mysql用户 本地 非本地_linux

use mysql;
select user,host,password from user;

这张表就是管理登录密码和权限的表。user是登录的账户,host表示可以登录的主机,localhost表示本机,127.0.0.1也是表示主机,但是他们是不互通的,%表示所有的ip主机都可以登录。password是密码。

可以看到上图中第一行的password是有一串字符串的,表示的是密码。

而其他行的密码都是空的,则表示不需要密码就可以登录。如果这些不需要密码的主机在登录时有密码,那么就会登不进。这也是我今天遇到的问题。只需要不输入密码就可以登录进去了,当然最好是要有密码。所有给root用户的对应的主机localhost添加密码,然后就可以通过密码登录了。

这是添加,密码后的状态:

mysql用户 本地 非本地_linux_02