问题 & 思路
Ubuntu 按照官网指示,安装宝塔面板之后,在运营商的安全组里,
导入了相关的出站入站规则(此处有坑,下文详述),然后发现无法连接外网的云
数据库。 前后排查了很多原因,发现服务器能访问自己的本地数据库,而云数据库也能通过 TCP/IP 能正常连接,但是服务器却连不上云数据库。 这说明,是
安装宝塔面板之后的服务器,与云数据库直接的连接通信出了问题。
宝塔面板内的指示中,安装完之后会要求调整出站入站的端口。相关链接有一个默认的入站出站规则文件下载,下载后可导入安全组。
但是,该安全组的出站规则不是常见的全部放行,而是只放行以下端口;
规则协议 |
端口 |
目标 |
策略 |
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
连接的端口是否畅通?
端口是多少,有没有修改过 端口是否已被占用 服务器安全组里,端口的出站入站规则是否正常
连接数据库的程序是否异常 ?
该
编程语言下连接数据库所需的拓展是否有安装 (比如php的pdo拓展) 连接使用的函数是否用法不当 程序与数据库服务是否不兼容