继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

《投稿008期 | 数据库无法连接的踩坑经历与思路总结》

维生素P
关注TA
已关注
手记 42
粉丝 8343
获赞 253

前言

几乎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拓展)

    • 连接使用的函数是否用法不当

    • 程序与数据库服务是否不兼容

    • 程序操作的数据库与数据表是否存在

打开App,阅读手记
15人推荐
发表评论
随时随地看视频慕课网APP

热门评论

666,给大佬打call

666,给大佬打call

查看全部评论