• 刚刚在虚拟主机上安装mysql,  想使用Navicat 操作mysql.  但是连接不上
    报错:  2003 - can't connect to MySQL server on '192.168.1.108'(10038)

    使用apt-get安装的mysql, 没有修改任何配置. 在虚拟机里 查看数据库, 

    use mysql;  # mysql库里有一个user表
    show tables;
    select user,host from user;
    # 看到root那一行记录 root对应的host是localhost, 也就是不能远程登录的意思. 需要将其修改成%.
    update user set host='%' where user='root'; #表示允许远程其他用户登录

    还有一种方法(没有尝试):  grant all privileges on *.* to 'root'@'%' identified by '密码' with grant option;   #也是修改登录权限,这个和修改表任选其一

  • 设置完user表还是不行,  继续
    netstat -apn | grep 3306  #显示的如果是127.0.0.1:3306那么就注释/etc/mysql/mysql.conf.d/mysqld.cnf 中的bind-address 127.0.0.1

    注释完成后重启mysql.

    #重启mysql (Ubuntu系统)
    /etc/init.d/mysql  restart

       再使用netstat  -apn | grep 3306 查看 如果显示的是 :::3306 就OK了    连接成功!!!

  • flush  privileges  #刷新权限, 有的时候可能需要刷新一下,
  • 上面的是在Windows的Ubuntu虚拟机上操作的, 在服务器上操作的时候发现略有不同, 记录一下. 在服务器上创建新的用户的时候, 如果想要修改user表, 不需要修改mysqld.cnf文件, 在修改user 表之后, 重启mysql 即可生效.不用注释掉这一行了。因为这里不是绑定127.0.0.1,如果绑定127.0.0.1,那就注释掉。
  • 如果新买的阿里云服务器,安装mysql之后,在服务器上能访问,Navicat链接不上,并且已经按照上面的步骤修改了user表和配置文件mysqld.cnf等,还是不能访问,原因是没有开放3306端口。
  • 注意:如果user表中同一个用户名有多个行,比如说root 账户,有两行,一行是host 为localhost   另一行 host 为% , 这个时候如果你在其他电脑登录mysql 的 root 账号发现登录不上去,是因为mysql读取多个账号的时候,判断user,host是有顺序的。%排在localhost 的后面,所以判断结果还是localhost,只能本机登录。解决办法:可以临时修改user表的host为你当前使用的电脑IP,实现永久的在其他电脑登录mysql , 那就把localhost那个记录从user表删除。
  •  访问控制-连接验证官方文档:https://dev.mysql.com/doc/refman/8.0/en/connection-access.html