为什么写这篇文章
很大一部分原因是因为网上找不到比内容较全的文章作为一个小白解决所面临的问题
关于Navicat连接Linux上的MySQL为什么出现以下报错
问题描述
这个报错很有可能是你的linux的防火墙不允许你连接到MySQL服务器导致的具体怎么排查,后面会详细说明。
这个报错有可能是以下原因
1、MySQL 服务器没有在你指定的 IP 地址 ‘192.168.111.128’ 上运行。
2、MySQL 服务器正在运行,但防火墙或网络设置阻止了你的连接请求。
3、在 Navicat 中提供的 MySQL 用户名、密码或端口号不正确。
请注意:这里的(using password:YES)指的是你是否填写了密码而不是你的密码是正确的,即使你填写了错误的密码,他还是会报这个错误。
如何排查问题出在哪:
对于图一,首先我们可以尝试Windows上通过命令行是否能够ping通linux的ip地址
如果没有ping通先考虑自己是否选对了linux的ip地址,查看linux的ip地址可以打开终端输入ifconfig或者使用ip addr show查看,一般是eth33或者eth0,一定要选对ip地址,不要以为第一个就是ip地址,因为有些同学可能在linux上安装了doker环境等导致第一个并不是Linux的ip地址。
同时需要注意的是,对于虚拟机centos7版本linux的网卡有两种
这两种会对应两种不同的ip地址
如果你的虚拟机需要连接到Internet,你可能会使用VMnet8(通常配置为NAT模式)。而VMnet1通常用于虚拟机之间的仅主机通信。
值得提一嘴的是,我一开始一直以为是本机IP与Linux的mysql进行连接,直到我发现了图二的报错中root用户对应的host地址是192.168.44.1,而且如果你是连接的校园网,那么你的ip地址很有可能是局域网ip而不是你的公网ip地址,所以我在配置mysql服务器用户的时候一直使用的就是本机的ip地址,而不是根据报错改的,因为图一报错让我查询到了很多不相关的东西,不知道怎么排查错误乱改,导致明明很简单的东西却复杂化了。
所以说这就是为什么当你试图解决一个你不理解的问题时,复杂化就产生了。QAQ
当这两个都没有什么问题,你还是有图一的报错时,你可以配置防火墙允许其他ip访问你的mysql服务器端口(默认是3306端口),即防火墙放开mysql端口(默认为3306).
在Linux系统中,有两种主要的防火墙工具,分别是iptables和firewalld。在较新的Linux发行版中,如CentOS 7及以上版本,默认使用的是firewalld的防火墙,而不是iptables。
这里以firewalld为例子,iptables防火墙操作也是类似的这里不做详细说明。
在firewalld防火墙上允许MySQL服务器的3306端口供外部访问,你可以按照以下步骤进行操作:
- 首先,确保你已经登录到Linux服务器上,并且具有管理员权限。
- 打开终端或命令行界面。
- 输入以下命令以允许3306端口通过防火墙:
sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
sudo firewall-cmd --reload
当你的图一报错解决后出现了图二的报错,那么你可以先登录你的mysql查看,在你使用登录命令时可能会出先报错,因为你的权限不够,如图
可以使用su命令提高权限至超级管理员,或者在mysql -u “username”-p 命令前加sudo提高命令的权限来解决这个问题,“username”是选择登录的mysql用户名。
登陆后可以使用如下语句查看你的mysql上的用户名及主机(host)地址
SELECT user, host FROM mysql.user;
默认应该只有下面四个,我的是添加了对应虚拟机两种不同状态下的用户及主机
如果只有下面四个,那么你的mysql只能本地访问,Navicat上根本找不到对应的用户
,就会报图二的错误,其次就是输错了密码或则用户名也会报图二错误。
那么应该如何添加相关用户,如果你的MySQL是8.0及以后的版本。
你可以使用命令CREATE USER创建用户,然后使用ALTER USER命令设置密码,最后使用GRANT命令赋予权限
以图二报错的用户名为root,ip地址为192.168.44.1为例
CREATE USER 'root'@'192.168.44.1’;
ALTER USER 'root' @'192.168.44.1' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'root' @'192.168.44.1';
FLUSH PRIVILEGES;
注意这里的password需要你自己输入相关密码,我这里就用password代替了。
根据图二的报错添加mysql的用户来供windows访问,就能解决问题了。
希望这篇文章能对你有所帮助,确实写文章很花时间,这也应该是很多人为什么遇到问题花了很长时间解决,不会把经验分享出来的一个原因。
版权归原作者 涛声依在 所有, 如有侵权,请联系我们删除。