- 刚刚在虚拟主机上安装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