先简单说一下,mysql-server 安装后可以通过默认用户密码登录(mysql本身提供,在/etc/mysql/demian.cnf下查看,如下图) 或者 root用户登录(默认没有密码),
你自己的用户(普通用户)是无法登陆的,验证:终端输入:mysql -u 你的用户 -p, 会报错,原因是你的用户不在 mysql 用户组中,无法访问mysql服务。
因此,远程登录必须用mysql用户组中的用户登录,也就是默认下可以使用 root 用户登录,而用 ‘你的用户’ 无法登录。所以需要把 你的用户 放入mysql用户组中。
先说选择你的用户远程登录
其实就是创建用户,只不过创建一个跟你的用户同名的用户(你要创建不同名的也可,但是何必搞个新的),再直接一点就是把 你的用户 添加到mysql的用户组(添加到user表中),
1.先确认配置文件绑定端口号注释掉:
sudo vim /etc/mysql/mysql.conf.d/ /mysqld.cnf
文件打开后将 bind-address = 127.0.0.1 这一行注释掉,此行不注释只能本机登录。
2.登录mysql, 可以用上述默认用户登录,也可root用户登录
sudo mysql -u root -p
3.进入mysql后创建一个用户(假设你的用户是hello,那就也创建一个hello用户吧!)
create user 'hello'@'%' identified by '123456';
这里%表示所有远程主机能登录,不能是localhost。密码自定。
4.然后给此用户赋予权限
grant all privileges on *.* to 'hello'@'%';
flush privileges;
赋予权限这个语句特别说明,后面如参数identified by '密码' with option之类的在高版本不支持了,新的高版本参数不一样,你必须确认你的版本才去用,否则报参数错误。我这条8.0版本可用
5.退出mysql并重启mysql。
exit
sudo service mysql restart
结果在物理机Navicat上常规登录如下,直接通过你的数据库用户名密码登录,且在你的云机输入 mysql -u 你的用户 -p 密码回车已经不报错了!
再说一下用root用户远程登录
其实本质和上面一样,只不过root用户默认存在于mysql用户组中,无需创建。
但是需要要改一个host字段为%,表示任一主机可远程连接。默认为localhost
而且root用户默认无密码,必须设置,否则远程无法通过root用户空密码登录(普通用户空密码可以登陆,比如上面hello用户可以不设置密码而空密码登录)
解决如下:
1.同样你得确认配置文件绑定本机端口号注释掉,方法如上。
2.设置host为%
进入mysql后执行
use mysql;
update user set host = '%' where user = 'root';
可以 select user,host from user; 看到root对应的host值已经更改为%
2.修改root用户密码
alter user 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的密码';
退出重启
结果在物理机Navicat上常规登录如下