Navicat连接linux虚拟机上的MySQL可能遇到的问题以及如何排查

为什么写这篇文章

很大一部分原因是因为网上找不到比内容较全的文章作为一个小白解决所面临的问题

关于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端口供外部访问,你可以按照以下步骤进行操作:

  1. 首先,确保你已经登录到Linux服务器上,并且具有管理员权限。

  2. 打开终端或命令行界面。

  3. 输入以下命令以允许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访问,就能解决问题了。
在这里插入图片描述
希望这篇文章能对你有所帮助,确实写文章很花时间,这也应该是很多人为什么遇到问题花了很长时间解决,不会把经验分享出来的一个原因。

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值