navicat for mysql 连接不上mysql服务的原因排除
1:确保mysql的数据库服务正确启动
2:输入的用户名密码是否正确
3:数据是否开启远程连接
4:关闭防火墙
5:mysql版本不同导致的加密规则不同的问题
一、
1、现在先来查看ubuntu的ip地址,在终端输入如下命令。
ifconfig
我们用windows机器ping一下ubuntu,发现能ping通,如果不通可能涉及到网卡的问题,本文未做讲解。
2、尝试用navicat远程登录,使用root用户的密码来登录。
3、报错,无法连接。
二、解决2003这个问题
1、检查ubuntu上的mysql服务是否正常启动,命令如下:
service mysql status
发现服务正常启动。
2、检查用户名密码是否错误,我们使用刚才的root用户以及密码在ubuntu上进行登录看看能否进入数据库。
sudo mysql -uroot -p000000
成功登录说明用户名密码没有问题。
3、检查是否允许远程连接,因为一般mysql数据库刚安装时默认不允许远程连接的,我们现在来开启远程连接,有两步一是修改数据配置文件中的bind-address以及mysqlx-bind-address两个参数注释掉,这两个参数原本为127.0.0.1只能监听本地。注释掉之后就监听所有的ip。
注意 :这里一定要加sudo 否则即便保存之后也修改不成功。
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
把bind-address以及mysqlx-bind-address注释掉
注意:一定要重启mysql服务器,否则不生效。
service mysql restart
重启成功。
4、我们下一步需要开启root用户的远程连接,我们先进入数据库,查看数据库的用户登录表。
登录mysql
sudo mysql -uroot -p000000
进入mysql数据库
use mysql
查找所有的用户表,命令如下
select user,host from user;
我们看到mysql只允许root用户从本地进行登录,而不能从远程登录。
我们通过如下命令来进行修改,将只允许本地登录改为允许任意host登录。
update user set host='%' where user='root' and host='localhost' LIMIT 1;
刷新权限
flush privileges;
查看是否修改成功
select user,host from user;
5、随后我们检查ubuntu的防火墙是否关闭,因为防火墙会屏蔽连接。
service firewalld status;
防火墙处于开启状态
关闭防火墙命令如下
systemctl stop firewalld
防火墙已经关闭
三、接下来我们尝试再一次使用navicat来连接ubuntu上的mysql。
我们发现报了一个新的错误,经过检索,发现是因为mysql版本之间加密方式不一样,这种问题其实是加密规则的问题: 出现这个问题原因是mysql8之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password解决办法:把mysql用户登录密码加密规则还原成mysql_native_password。
先进入mysql数据库,在具体操作如下:
更改加密方式
#在mysql中先更改加密方式
ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
重新设置root的密码,并刷新权限
#由于加密规则更改,所以需要重新设置密码
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '000000';
#刷新权限
FLUSH PRIVILEGES;
至此加密方式更改完成
最后再尝试用navicat进行连接。
连接成功啦!!!!!!!