You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:通过SSH与Navicat连接ServerPilot上的MySQL失败

解决Navicat通过SSH连接ServerPilot管理的MySQL问题

我之前也碰到过完全一样的情况!折腾了好半天终于搞定,给你几个亲测有效的排查和解决步骤:

1. 先修正SSH登录用户(最可能的坑)

ServerPilot初始化VPS后默认禁用了root用户的SSH登录,所以你填root作为SSH用户名肯定连不上!必须用这两个选项之一:

  • serverpilot用户:这是ServerPilot创建的默认管理用户,密码是你当初初始化ServerPilot时设置的那个(不是VPS的root密码)
  • 你自己在ServerPilot后台添加的sudo用户

2. 核对Navicat的详细配置

SSH选项卡(重点)

  • 主机名/IP地址:你的VPS公网IP
  • 端口:22(确认VPS防火墙ufw/iptables没封22端口,你用Putty能登就没问题)
  • 用户名:serverpilot(或你自己的sudo用户)
  • 认证方式:优先用密钥对(更稳定),把本地公钥添加到VPS的/home/serverpilot/.ssh/authorized_keys里;如果用密码,一定要填serverpilot用户的SSH密码,不是root密码

常规选项卡

  • 主机名:填127.0.0.1,不要用localhost(localhost可能会走Unix Socket,而SSH隧道是TCP连接,用127.0.0.1更可靠)
  • 端口:3306
  • 用户名:ServerPilot给你的数据库用户名(格式一般是你的应用名_user,比如你创建的app叫myblog,用户就是myblog_user)
  • 密码:对应数据库的密码(不是SSH密码!别搞混)

3. 验证MySQL用户的连接权限

ServerPilot创建的数据库用户默认只允许从localhost/127.0.0.1连接,SSH隧道过来的请求属于本地连接,理论上没问题,但可以手动确认:

  1. 登录phpMyAdmin(你说能正常用)
  2. 进入对应的数据库,点击顶部「用户账户」
  3. 找到你的数据库用户,检查「主机」列是不是localhost或127.0.0.1
    • 如果是%(允许任何主机)反而可能有安全限制,建议改回localhost

或者SSH登录VPS后执行命令:

mysql -u 你的数据库用户名 -p
# 输入数据库密码后执行
SELECT user, host FROM mysql.user WHERE user='你的数据库用户名';

确保host是localhost或127.0.0.1

4. 排查Putty隧道法的2013错误

如果你用Putty手动建隧道,注意这几点:

  • 隧道配置:Putty → Connection → SSH → Tunnels,源端口填3307,目标填127.0.0.1:3306,点击「Add」后再登录VPS
  • Navicat常规选项卡:主机名填127.0.0.1,端口填3307(和Putty的源端口对应)
  • 调大Navicat的连接超时:常规选项卡→高级→把「连接超时」改成60秒以上,避免因隧道建立慢导致超时

5. 额外检查项

  • 确认MySQL服务正常运行:SSH登录VPS后执行sudo systemctl status mysql,显示active(running)就没问题
  • 不要在VPS上开放3306端口到公网:ServerPilot的MySQL默认只监听本地,通过SSH隧道访问更安全,也不会有端口冲突问题

我当初就是踩了「用root用户SSH登录」的坑,换成serverpilot用户后立刻就连上了,你可以先试这个!

内容的提问来源于stack exchange,提问作者Learner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:57:57