前言
几乎99%的小伙伴在最开始捣鼓数据库的时候,绝对都会遇到数据库无法连接的情况,而网上解决无法连接的答案千千万,经常是摸着头脑一个个去试。因此,在踩过几次坑之后,决定自己细细梳理一遍思路,这样遇到数据库无法连接的问题,就能快速定位解决。
当时业务要求使用Linux服务器,第一次捣鼓的时候不怎么了解,所以直接使用了一个操作面板进行处理。
下文先提一次数据库无法连接的踩坑经历,这也是触发了我梳理思路的一次经历。如果想直接看总结的可以拉到下方看 后续
部分。
问题 & 思路
-
Ubuntu 按照官网指示,安装宝塔面板之后,在运营商的安全组里,导入了相关的出站入站规则(
此处有坑,下文详述
),然后发现无法连接外网的云数据库。 -
前后花了很多时间排查了很多原因,发现服务器能访问自己的本地数据库,而云数据库也能通过 TCP/IP 能正常连接,但是服务器却连不上云数据库。
-
这说明,是安装宝塔面板之后的服务器,与云数据库直接的连接通信出了问题。
宝塔面板内的指示中,安装完之后会要求调整出站入站的端口。相关链接有一个默认的入站出站规则文件下载,下载后可导入安全组。
端口未放行 以下云服务商,安装宝塔后需开端口,不开启将无法使用。
腾讯云:https://www.bt.cn/bbs/thread-1229-1-1.html
阿里云:https://www.bt.cn/bbs/thread-2897-1-1.html
华为云:https://www.bt.cn/bbs/thread-3923-1-1.html…
也可以通过导入入站出站的规则来配置安全组(input是入站规则,output是出战规则)
sg_input_rules.xlsx
(15.15 KB, 下载次数: 5884)
sg_output_rules.xlsx
(14 KB, 下载次数: 5456)
但是,该安全组的出站规则不是常见的全部放行,而是只放行以下端口;
规则协议 | 端口 | 目标 | 策略 |
---|---|---|---|
TCP | 21 | 0.0.0.0/0 | 允许 |
TCP | 433 | 0.0.0.0/0 | 允许 |
TCP | 5880 | 0.0.0.0/0 | 允许 |
TCP | 80 | 0.0.0.0/0 | 允许 |
经过排查,发现原因在于服务器的安全组出站端口未开放,导致无法通过外网连接按照指定端口连接云数据库。
解决方法
因此,只需要在运营商的服务器安全组内增添一条如下的出站规则即可。
规则协议 | 端口 | 目标 | 策略 |
---|---|---|---|
TCP | 此处填云数据库的外网端口,例如12345 |
0.0.0.0/0 | 允许 |
或者修改安全组规则,使其默认全部出站端口都放开,再次尝试连接即可。
规则协议 | 端口 | 目标 | 策略 |
---|---|---|---|
ALL | `ALL | 0.0.0.0/0 | 允许 |
后续
如何解决无法连接数据库的问题 ?
连接数据库的本质,无非是 服务器程序 – 连接设置 – Mysql服务 三者的联通,因此出现无法访问数据库时,可以按以下思路去排查原因。
-
服务器是否正常运行 ?
-
服务器运行是否正常(有足够内存和cpu执行数据库操作)
-
服务器是否ip可达
-
是否网络可访问(连接云数据库需要网络)
-
web服务器配置是否正常 (Nginx Apache IIS)
-
-
Mysql服务是否正常运行?
-
检查Mysql是否启动
-
账号密码是否正确
-
Mysql版本是否兼容系统,是否兼容程序
-
系统防火墙是否拦截
-
系统启动项是否拦截
-
配置文件是否异常
-
连接方式是否已设置
-
Socket 连接
-
mysql.sock 文件是否异常
-
mysql配置是否已填写 .sock文件路径
-
web服务器是否已填写 .sock文件路径
-
数据库的程序代码,是否有要求一定要填写 .sock文件路径相关参数
-
-
TCP/IP连接
-
连接地址是否正确
-
web服务器是否是否正确配置 localhost 和 127.0.0.1
-
-
-
-
连接的端口是否畅通?
-
端口是多少,默认端口3306有没有修改过
-
端口是否已被占用
-
端口配置是否异常
-
服务器安全组里,端口的出站入站规则是否正常
-
-
连接数据库的程序是否异常 ?
-
该编程语言下连接数据库所需的拓展是否有安装 (比如php的pdo拓展)
-
连接使用的函数是否用法不当
-
程序与数据库服务是否不兼容
-
程序操作的数据库与数据表是否存在
-
热门评论
666,给大佬打call
666,给大佬打call