Navicat无法连接MySQL

本文最后更新于:2023年7月23日 下午

Navicat无法连接到MySQL数据库

解决问题只需要一分钟,而发现问题则需要三小时。

省流版:

服务器没有开MySQL的端口。

之所以还要写一篇文章,是因为开端口只需要一分钟,而根据各种现象与线索推断出没有开端口则需要三个小时。

问题背景

在服务器上安装了Linux虚拟机,然后在虚拟机上安装MySQL。

之前一直都是用xshell操纵MySQL,今天想使用Navicat连接。

my数据库

MySQL的数据库如下:

image-20230723162913700

共两个数据库,一个myDB1,一个university数据库(其余为MySQL自带的数据库)

此时我MySQL里面的用户如图:

image-20230723162928064

可以看到里面有三个用户,root,peng和user_for_db1。其中user_for_db1是之前建立的,根据名字可知,为user_for_db1赋予了myDB1数据库的所有权限,同时为peng用户赋予所有数据库的所有访问权限。

问题

在Navicat中,建立了两个连接,如图:

连接1:

image-20230723162941660 image-20230723162956534

可以看到连接成功,并且由于设置了访问权限,所以只有myDB1一个数据库。这个连接是很久之前建立的,当时忘记怎么连接的了(果然还是要养成记录的好习惯)。

但是当用另一个用户连接的时候,却提醒连接出错,如图:

image-20230723163046174 image-20230723163100864

另外也不是SSH连接的错误,因为都不行,这里只是没放截图。

请教大佬

在向大佬请教过程中,并没有直接问为什么连不上,因为很多背景会导致共同的问题,上来直接问往往讲不清背景。我先是注意到在XShell中,连接的端口是22,协议是SSH,而Navicat中的端口是3306,因此就先问了一下这两个端口的不同。

大佬回答如下:

1
2
22这个端口,是用SSH连接服务器的默认端口;
3306这个端口,是MySQL的默认端口。

当时还并没有十分清楚,大佬又来了一句:

1
2
3306可以改的
开启MySQL时候换个端口就行

听了这句话之后,我也排除了端口冲突的问题,因为这两个连接并没有同时打开。

之后向大佬讲了一下背景,也就是上文的内容,大佬听完后,也是不太清楚。。。。

峰回路转

其实一开始就感觉这个问题有点奇怪,所以并没有很失望,不过看着大佬跟我说的那句:3306可以改的,我陷入了沉思。

MySQL怎么知道你把端口改了呢?

突然又想到最初设置服务器的时候,在安全组里面设置过一些端口

于是问了一下大佬要不要在服务器上添加允许这个新端口

果不其然,需要在服务器上设置。

然后,就想着在服务器上添加一个新端口,尝试用新端口连接。

然后震惊地发现,我没有给MySQL开端口!!

image-20230723163139596

发现这点后,我并没有立刻开放端口,而是开始思索,我之前怎么登录的呢?

看着被允许的几个端口,尤其是22那个端口,事情逐渐明朗了起来

我开了22的端口,而xshell也是用22连接的,也就是说,我用xshell连接,相当于是远程桌面

我是先通过22端口,连接到远程桌面,也就相当于登录到服务器这个计算机,然后在进入到mysql,这时的MySQL就相当于是远程计算机的本地应用了,所以不需要向外网开放3306这个端口,本地计算机自然有访问所有端口的能力。

但是我一开始怎么连接成功的呢?

就是这个

image-20230723163240414

说实话想了好久也没想清楚,目前的推断是,在上图的安全组中(图7),有三个内网IP,有可能服务器认为我这个连接属于内网连接,所以可以通过(只是推测)。

收尾

开放端口后,确实连接成功了,但是发现没有任何数据库信息,于是通过网上查阅资料,知道是需要如下操作,简单记录一下:

右键——编辑连接——数据库——选择对应的数据库(可能需要勾选使用自定义数据库列表)

image-20230723163320055

总结

  • 通过这次的问题,我明白了端口的重要性,端口和IP地址一样都是用来标识计算机的,通过这些标识赋予不同计算机的访问权限。
  • 熟悉了一些关于用户与数据库授权的知识,只有授权后才能在Navicat中显示。
  • 进一步感受到了如何正确的问问题:
    • 自己必须先尝试一些方案,不要遇到问题就直接问,先自己尝试解决。
    • 同时要将对方代入到你的场景中,描述清楚背景是成功的一半。
    • 在问的过程中,也要不断给出自己的思路,自己多加思考,因为没人有义务无偿且天然地向你解答。
    • 即使到最后,这个解决方案,包括添加新端口与两个端口的差别,都是我自己引导着大佬去解答的。大佬并没有直接给出方案(可能还是由于描述不清,到最后他才知道我之前是用xShell登录的),自己才是最清楚历史原因的人,一定要多思考。
  • 添加一个端口只需要一分钟,但知道为什么添加,却需要三个小时。
  • 2023年更新:计算机网络无处不在,无法理解网络,无法理解社会

Navicat无法连接MySQL
https://blogoasis.github.io/post/32e06ea.html
作者
phInTJ
发布于
2022年7月8日
许可协议