远程数据库连接故障排查经验总结
远程数据库连接故障排查经验总结
一、故障背景
|
项目 |
内容 |
|
环境 |
腾讯云 CVM(Ubuntu 24.04),宝塔面板(BT Panel)已卸载 MySQL |
|
客户端 |
DBeaver(本地 Windows) |
|
报错 |
|
|
关键转折 |
安全组始终开放 3306 端口,服务恢复后仍需刷新客户端状态才最终连通 |
二、排查逻辑链
服务进程是否运行?
↓ 是
MySQL 监听地址是否为 0.0.0.0:3306?
↓ 是
root 用户是否允许远程登录(host = %)?
↓ 是
操作系统防火墙(UFW/iptables)是否放行 3306?
↓ 是
云平台安全组是否放行 3306?
↓ 是
客户端连接状态/网络缓存是否正常?
↓ 是
✅ 连接成功
三、各环节排查与判断
第一层:服务进程状态
# 注意:Ubuntu APT 安装的服务名为 mysql,宝塔安装的为 mysqld
sudo systemctl status mysql
# 或
sudo systemctl status mysqld
|
结果 |
含义 |
处理 |
|
|
服务正常 |
进入下一层 |
|
/ |
服务未运行 |
|
|
|
服务单元不存在 |
改用 ,或检查是否误用服务名 |
第二层:MySQL 监听地址
sudo netstat -tulnp | grep 3306
|
结果 |
含义 |
处理 |
|
|
监听所有 IP ✅ |
进入下一层 |
|
|
仅监听本地 |
修改 ,将 改为 ,重启 MySQL |
第三层:root 用户远程权限
sudo mysql -uroot -p -e "SELECT host, user FROM mysql.user WHERE user='root';"
|
结果 |
含义 |
处理 |
|
|
允许任意 IP 远程登录 ✅ |
进入下一层 |
|
|
仅允许本地登录 |
执行 |
第四层:操作系统防火墙
# 检查 UFW
sudo ufw status
# 检查 iptables
sudo iptables -L -n | grep 3306
|
结果 |
处理 |
|
无 3306 放行规则 |
或 |
第五层:云平台安全组
|
平台 |
操作路径 |
|
腾讯云 |
控制台 → 云服务器 → 实例 → 安全组 → 入站规则 → 添加 ,来源 或指定 IP |
|
阿里云 |
控制台 → ECS → 实例 → 安全组 → 入站规则 → 添加 |
特别注意:安全组规则修改后立即生效,无需重启服务器。
第六层:客户端连接状态/网络缓存
适用场景:数据库服务中断后重新上线,安全组始终开放,但 DBeaver 仍报超时。
|
操作 |
命令/步骤 |
|
刷新本地 DNS(Windows) |
|
|
重启 DBeaver |
完全退出后重新打开 |
|
新建连接 |
在 DBeaver 中新建连接(非复制旧连接) |
|
切换网络 |
切换 Wi-Fi / 连接手机热点,再切回 |
|
清空 DBeaver 驱动缓存 |
数据库 → 驱动管理器 → 重置为默认 |
|
重启本地路由器(可选) |
清除 NAT 缓存 |
四、宝塔处理
环境特征识别
- 日志路径:
/www/server/data/ - 配置文件路径:
/etc/my.cnf(宝塔) vs/etc/mysql/mysql.conf.d/(APT) - 服务名:
mysqld(宝塔) vsmysql(APT)
宝塔卸载残留常见问题
|
现象 |
原因 |
解决方案 |
|
→ |
宝塔删除了 systemd 单元文件 |
改用 |
|
→ |
客户端未加入系统 PATH |
或使用绝对路径 |
|
多个配置文件冲突 |
与 共存 |
用 查找并清理多余配置 |
宝塔环境推荐操作方式
- 登录宝塔面板 → 软件商店 → 已安装 → MySQL → 设置
- 通过面板的“命令行”选项卡执行 SQL
- 通过面板的“重启”按钮启动服务(错误信息更直观)
五、工具链速查
|
场景 |
命令/工具 |
|
测试端口连通性(Linux/Mac) |
或 |
|
测试端口连通性(Windows) |
|
|
安装 Telnet 客户端(Windows) |
(管理员 CMD) |
|
安装 MySQL 客户端(Ubuntu) |
|
|
查看 MySQL 日志 |
|
|
查看宝塔 MySQL 日志 |
|
|
查看服务端口监听 |
|
|
查看防火墙状态(UFW) |
|
|
查看防火墙规则(iptables) |
|
六、复盘
|
阶段 |
问题 |
发现方式 |
解决方式 |
|
第 1 层 |
MySQL 服务崩溃(宝塔卸载残留) |
显示 |
用 重装 |
|
第 2 层 |
客户端命令缺失 |
→ |
|
|
第 3 层 |
root 免密登录失败(有密码) |
→ |
改用 |
|
第 4 层 |
监听地址正常 |
显示 |
✅ 通过 |
|
第 5 层 |
root 用户权限正常 |
显示 |
✅ 通过 |
|
第 6 层 |
云安全组始终开放 |
控制台确认 |
✅ 通过 |
|
第 7 层 |
客户端连接状态残留 |
端口不通,但安全组已开放 |
重启 DBeaver + 新建连接 + 刷新 DNS |
结论:服务中断期间,本地 DBeaver / 操作系统 / 路由器缓存了“该 IP:端口 不可达”的状态,服务恢复后未自动刷新。因此虽然后 4 层全部正常,客户端仍报超时。
七、核心认知
“服务活着 ≠ 端口开着,端口开着 ≠ 防火墙放过,防火墙放过 ≠ 云网关放行,云网关放行 ≠ 客户端能连。”

浙公网安备 33010602011771号