原因

mysql 远程不能登录一般是没有设置 host% 或者对应的ip地址
这种情况下一般是通过修改原来 root 账户的 host% 来进行远程登录,但是这种设置也是有一个缺点,就是某种情况下本地命令行就不能登录了。

解决方法

所以正确的做法是新创建一个 root 账户,但是 host% 。具体操作为

1
2
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '12306' WITH GRANT OPTION; -- 12306 是密码
flush privileges;

这时候在使用远程连接工具登录 root 账户就可以了。
总结一下,就是如果需要用户在本地和远程都可以连接,则需要创建两个账户,一个 hostlocalhost;另一个 host%,当然这种方式并不安全,建议两个用户密码不一样

语句分析

  • ALL PRIVILEGES
    表示将所有权限授予给用户。也可指定具体的权限,如:SELECT,CREATE,DROP等。
    GRANT SELECT,CREATE,UPDATE,ALTER,DROP ON….
  • ON
    表示这些权限对哪些数据库和表生效,格式:数据库名.表名,这里写“*”表示所有数据库,所有表。如果我要指定将权限应用到test库的user表中,可以这么写:test.user
  • TO
    将权限授予哪个用户。格式:”用户名”@”登录IP或域名或%”。%表示没有限制,在任何主机都可以登录。比如:”web_user”@”192.168.0.%”,表示web_user这个用户只能在192.168.0IP段登录
  • IDENTIFIED BY
    指定用户的登录密码
  • WITH GRANT OPTION
    表示允许用户将自己的权限授权给其它用户
  • flush privileges
    更新权限信息
    使用GRANT给用户添加权限,权限会自动叠加,不会覆盖之前授予的权限,比如你先给用户添加一个SELECT权限,后来又给用户添加了一个INSERT权限,那么该用户就同时拥有了SELECT和INSERT权限。

详细的权限列表信息