求助:通过SSH与Navicat连接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隧道过来的请求属于本地连接,理论上没问题,但可以手动确认:
- 登录phpMyAdmin(你说能正常用)
- 进入对应的数据库,点击顶部「用户账户」
- 找到你的数据库用户,检查「主机」列是不是
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
相关产品推荐
相关产品推荐

