今天在Ubuntu22.04上安装完成mysql8后,在主机用Navicat连接后报未知错误,处理步骤如下:
1.cmd 测试连接虚拟机3306端口
telnet 192.168.0.5 3306
提示连接失败,因此可以从端口入手,我事先关闭了防火墙,所以因该不是防火墙问题。
2. 进入虚拟机mysql,执行
select user,host from mysql.user;
查看所有用户的登录ip,我这里选择用root登录,把root的host值改为%表示可以在任意设备以root登录mysql,修改代码如下
update MySQL.user set host = '%' where user = 'root';
3.在虚拟机查看3306端口情况
netstat -apn|grep 3306
发现显示的是 127.0.0.1:3306,于是
vim /etc/mysql/mysql.conf.d/mysqld.cnf
注释其中的 bind-adress 127.0.0.1,然后重启mysql服务再次查看
service mysql restart
netstat -apn|grep 3306
发现显示的是::::3306 便可以了。
到这里按道理来说是可以允许远程访问mysql,先在navicat测试连接一下,报错Acces denied for 'root'@'192.168.0.8......,其中192.168.0.8是主机的IP地址。之前的报错是未知错误,现在是主机登录失败,我想应该是3306端口连接的问题解决了同时又产生了其他的问题,于是我在cmd又测试了一下
telnet 192.168.0.5 3306
确实连接到3306端口了,于是我在IDEA里以同样的方式连接数据库,获得了精确的报错信息:用户名和密码的组合不被接收,意思是密码错了。
而我此时由于是mysql8 直接无密码登录的,在连接的时候也把密码设空。考虑到是密码的原因,于是我在虚拟机进入数据库修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' ;
但是报错 ERROR 1396 (HY000): Operation ALTER USER failed for ‘root‘@‘localhost’。这里把localhost改为%就能成功执行了。
更改密码后重新连接数据库,成功。