HTTP隧道本质是通过PHP脚本中转TCP流量绕过网络限制,并非真正基于HTTP协议;Navicat 15通过上传如tunnel.php的脚本到Web服务器,由其转发连接至内网数据库(如MySQL 3306端口),要求PHP支持sockets、allow_url_fopen开启、脚本权限正确且目标地址填内网IP而非localhost。
HTTP隧道备份的本质是绕过网络限制,不是真走HTTP协议
navicat 15 的「http 隧道」功能实际用的是自定义 php 脚本(比如 tunnel.php)在公网 web 服务器上做 tcp 流量中转,它和 http 协议本身无关,也不依赖 web 服务的 api。你上传 tunnel.php 到 web 目录后,navicat 会通过它连接内网数据库的 mysql 端口(如 3306),中间所有数据都经该脚本转发——所以脚本必须能执行、可写、且能 fsockopen() 连内网 db。
上传 tunnel.php 前必须确认三件事
很多人传完就报错「Connection refused」或「Script not found」,问题几乎都出在这几步:
- Web 服务器 PHP 版本 ≥ 5.6(Navicat 官方要求),且开启
allow_url_fopen = On和extension=sockets(Linux 下常需手动启用 sockets 扩展) -
tunnel.php文件权限设为 644,所在目录可被 Web 用户读取(不能放在/var/www/html/admin/这类有 .htaccess 拒绝访问的路径) - 脚本里硬编码的数据库地址不能写
localhost—— 这是指 Web 服务器本机,而你要连的是内网 DB,得填内网 IP(如192.168.1.100)和端口(如3306)
Navicat 15 中配置 HTTP 隧道的关键参数
在连接设置 → 「SSH」标签页 → 切换到「HTTP 隧道」,不是 SSH 或常规连接:
- 「HTTP 隧道 URL」填完整可访问地址,例如
https://your-domain.com/tunnel.php(必须带http://或https://,末尾不加斜杠) - 「目标主机」填内网数据库真实 IP(不是
127.0.0.1,也不是 Web 服务器 IP) - 「目标端口」填 MySQL 实际监听端口(默认 3306,但内网可能改过)
- 「用户名」和「密码」是数据库账号,不是 Web 登录凭据;Navicat 不会把它们发给
tunnel.php,脚本里已固化
如果连不上,打开浏览器直接访问那个 URL,应返回纯文本 OK 或空响应;返回 PHP 错误、404 或下载弹窗,说明脚本没跑起来。
备份时容易被忽略的两个细节
HTTP 隧道只负责建立连接,后续操作(如导出 SQL)走的是标准 MySQL 协议,因此:
立即学习“PHP免费学习笔记(深入)”;
- Navicat 备份窗口里的「压缩」选项(gzip)在 HTTP 隧道下无效,导出文件不会压缩,且速度受 Web 服务器带宽和 PHP
max_execution_time限制(建议调高到 300+ 秒) - 若内网数据库启用了 strict mode 或新版本认证插件(如
caching_sha2_password),而tunnel.php是老版本(如 Navicat 自带的 2018 年版),会握手失败;必须换用支持 MySQL 8.0+ 认证的新版隧道脚本
最常卡住的地方:你以为在连远程库,其实 Navicat 正在等 Web 服务器把内网 DB 的响应原样吐回来——只要其中一环(PHP 执行、内网连通、MySQL 认证)断了,就静默超时,看不出具体哪步挂了。



















