navicat ssh隧道连接90%失败源于三处:未勾选“使用ssh隧道”、常规页主机误填公网ip(应填127.0.0.1)、mysql未监听127.0.0.1;隧道仅在双击连接时建立,非配置即启用,且mysql 8.0+必须显式配置bind-address=127.0.0.1方可响应隧道内连接。

能连上,但90%失败都卡在三个地方:SSH页填了服务器信息却没勾“使用SSH隧道”、常规页主机填错成公网IP、MySQL服务没监听127.0.0.1。
Navicat里必须勾选“使用SSH隧道”才真正建隧道
很多人配完SSH页就点“测试连接”,结果报错Can't connect to MySQL server on '127.0.0.1'——这不是MySQL问题,是Navicat根本没启动隧道。它只在双击连接时才按需建立,不是配置完就常驻运行。
务必确认:
- SSH选项卡中已勾选使用SSH隧道
- 常规选项卡里的主机名/IP地址填的是127.0.0.1(不是localhost,更不能是云服务器公网IP)
- 如果之前用直连方式建过同名连接,删掉重来,避免navicat and connection is being used静默冲突
MySQL 8.0必须监听127.0.0.1:3306,不能只绑0.0.0.0
SSH隧道把远程3306映射到本地回环,流量最终要进MySQL进程。如果MySQL配置了bind-address = 0.0.0.0但没加127.0.0.1,或者压根没写bind-address(默认只监听127.0.0.1),隧道流量会被拒绝。
检查并修正:
- 登录云服务器,执行sudo grep bind-address /etc/my.cnf
- 若输出为空或为0.0.0.0,编辑配置文件,在[mysqld]下添加:bind-address = 127.0.0.1
- 重启服务:sudo systemctl restart mysqld
- 验证:sudo ss -tlnp | grep :3306,应看到127.0.0.1:3306而非*:3306
私钥登录失败?格式、路径、密码弹窗三处最容易漏
Navicat对私钥极其挑剔,PuTTY的.ppk文件直接不认,必须转OpenSSH格式:
- 用PuTTYgen打开.ppk,选Conversions → Export OpenSSH key,保存为无后缀或.key文件
- 文件路径不能含中文或空格;拖进Navicat界面自动填充,别手输
- 如果私钥设了passphrase,Navicat会在后台弹窗要密码——任务栏会闪烁,注意切换窗口
命令行先验证基础链路:ssh -i /path/to/key user@your-server-ip -p 22,成功再进Navicat。
连接后查询慢或中断?保活和MySQL用户授权要同步配
SSH隧道本身延迟可忽略(实测50ms网络下增加
- Navicat SSH选项卡勾选保持连接活跃
- 或在云服务器端改/etc/ssh/sshd_config:ClientAliveInterval 60,然后sudo systemctl reload sshd
- MySQL用户权限必须明确允许从127.0.0.1连,例如:CREATE USER 'app'@'127.0.0.1' IDENTIFIED BY 'pwd'; GRANT SELECT ON db.* TO 'app'@'127.0.0.1'; FLUSH PRIVILEGES;。填'%'或'localhost'都不行
最易被忽略的是:MySQL 8.0默认启用skip-name-resolve,一旦开了,就必须用IP地址授权,'app'@'127.0.0.1'有效,'app'@'localhost'无效——而Navicat常规页填的是127.0.0.1,这里必须严格对应。











