Navicat无法连接MySQL
本文最后更新于:2023年7月23日 下午
Navicat无法连接到MySQL数据库
解决问题只需要一分钟,而发现问题则需要三小时。
省流版:
服务器没有开MySQL的端口。
之所以还要写一篇文章,是因为开端口只需要一分钟,而根据各种现象与线索推断出没有开端口则需要三个小时。
问题背景
在服务器上安装了Linux虚拟机,然后在虚拟机上安装MySQL。
之前一直都是用xshell操纵MySQL,今天想使用Navicat连接。
my数据库
MySQL的数据库如下:
共两个数据库,一个myDB1,一个university数据库(其余为MySQL自带的数据库)
此时我MySQL里面的用户如图:
可以看到里面有三个用户,root,peng和user_for_db1。其中user_for_db1是之前建立的,根据名字可知,为user_for_db1赋予了myDB1数据库的所有权限,同时为peng用户赋予所有数据库的所有访问权限。
问题
在Navicat中,建立了两个连接,如图:
连接1:
可以看到连接成功,并且由于设置了访问权限,所以只有myDB1一个数据库。这个连接是很久之前建立的,当时忘记怎么连接的了(果然还是要养成记录的好习惯)。
但是当用另一个用户连接的时候,却提醒连接出错,如图:
另外也不是SSH连接的错误,因为都不行,这里只是没放截图。
请教大佬
在向大佬请教过程中,并没有直接问为什么连不上,因为很多背景会导致共同的问题,上来直接问往往讲不清背景。我先是注意到在XShell中,连接的端口是22,协议是SSH,而Navicat中的端口是3306,因此就先问了一下这两个端口的不同。
大佬回答如下:
1 |
|
当时还并没有十分清楚,大佬又来了一句:
1 |
|
听了这句话之后,我也排除了端口冲突的问题,因为这两个连接并没有同时打开。
之后向大佬讲了一下背景,也就是上文的内容,大佬听完后,也是不太清楚。。。。
峰回路转
其实一开始就感觉这个问题有点奇怪,所以并没有很失望,不过看着大佬跟我说的那句:3306可以改的,我陷入了沉思。
MySQL怎么知道你把端口改了呢?
突然又想到最初设置服务器的时候,在安全组里面设置过一些端口
于是问了一下大佬要不要在服务器上添加允许这个新端口
果不其然,需要在服务器上设置。
然后,就想着在服务器上添加一个新端口,尝试用新端口连接。
然后震惊地发现,我没有给MySQL开端口!!
发现这点后,我并没有立刻开放端口,而是开始思索,我之前怎么登录的呢?
看着被允许的几个端口,尤其是22那个端口,事情逐渐明朗了起来
我开了22的端口,而xshell也是用22连接的,也就是说,我用xshell连接,相当于是远程桌面。
我是先通过22端口,连接到远程桌面,也就相当于登录到服务器这个计算机,然后在进入到mysql,这时的MySQL就相当于是远程计算机的本地应用了,所以不需要向外网开放3306这个端口,本地计算机自然有访问所有端口的能力。
但是我一开始怎么连接成功的呢?
就是这个
说实话想了好久也没想清楚,目前的推断是,在上图的安全组中(图7),有三个内网IP,有可能服务器认为我这个连接属于内网连接,所以可以通过(只是推测)。
收尾
开放端口后,确实连接成功了,但是发现没有任何数据库信息,于是通过网上查阅资料,知道是需要如下操作,简单记录一下:
右键——编辑连接——数据库——选择对应的数据库(可能需要勾选使用自定义数据库列表)
总结
- 通过这次的问题,我明白了端口的重要性,端口和IP地址一样都是用来标识计算机的,通过这些标识赋予不同计算机的访问权限。
- 熟悉了一些关于用户与数据库授权的知识,只有授权后才能在Navicat中显示。
- 进一步感受到了如何正确的问问题:
- 自己必须先尝试一些方案,不要遇到问题就直接问,先自己尝试解决。
- 同时要将对方代入到你的场景中,描述清楚背景是成功的一半。
- 在问的过程中,也要不断给出自己的思路,自己多加思考,因为没人有义务无偿且天然地向你解答。
- 即使到最后,这个解决方案,包括添加新端口与两个端口的差别,都是我自己引导着大佬去解答的。大佬并没有直接给出方案(可能还是由于描述不清,到最后他才知道我之前是用xShell登录的),自己才是最清楚历史原因的人,一定要多思考。
- 添加一个端口只需要一分钟,但知道为什么添加,却需要三个小时。
- 2023年更新:计算机网络无处不在,无法理解网络,无法理解社会