HTTP通道连接失败,先确认ntunnel_mysql.php是否可访问:需手动浏览器访问该PHP脚本URL,返回空白页或二进制乱码即基本可用;若报mysqli_connect未定义则缺扩展,Parse error则脚本损坏或上传模式错误;脚本权限、Web服务器配置及Navicat中通道地址、base64编码勾选、HTTP账号与脚本内USER_ACCOUNT一致均为关键。

HTTP通道连接失败,先确认ntunnel_mysql.php是否可访问
Navicat 16 的 HTTP 通道本质是靠服务器上一个 PHP 脚本(ntunnel_mysql.php)做代理转发。如果连接测试失败,90% 的问题出在脚本没跑通,而不是 Navicat 配置错。
必须手动用浏览器访问一次你的通道地址,比如 http://your-domain.com/ntunnel_mysql.php。看到空白页或返回一串二进制乱码(不是 PHP 报错、不是 404、不是 500)才算基本可用。若出现 Call to undefined function mysqli_connect(),说明服务器 PHP 缺少 mysqli 扩展;若提示 Parse error,可能是脚本被改坏或上传时用了 ASCII 模式(应使用二进制模式上传)。
- 脚本位置:Windows 默认在
C:\Program Files\PremiumSoft\Navicat 16 Premium\ntunnel\ntunnel_mysql.php;macOS 在/Applications/Navicat Premium.app/Contents/Resources/tunnel/ntunnel_mysql.php - 上传后务必检查 Web 服务器权限:PHP 文件需可读、可执行,所在目录需允许 CGI 执行(Nginx 要配
fastcgi_pass,Apache 要开AllowOverride All) - 不要重命名脚本后再改 Navicat 里的 URL —— 脚本里硬编码了认证逻辑(如
USER_ACCOUNT),改名不改内容会导致鉴权失败
Navicat 16 的 HTTP 选项卡里哪些字段不能填错
在连接配置的 HTTP 选项卡中,只有两个字段真正参与通信:通道地址 和 使用 base64 编码传出查询。其余字段(如用户名/密码)只是用来校验脚本层身份,和 MySQL 账号完全无关。
面向 CRM 系统的 MySQL 8 数据库模式设计。当用户需要为客户关系管理(CRM)系统设计、评审、优化或生成数据库模式时,应使用此项技能。
-
通道地址必须是完整 URL,以http://或https://开头,末尾带.php扩展名,中间不能有空格或中文路径 - 务必勾选
使用 base64 编码传出查询—— 否则在获取表结构、执行含中文或特殊符号的 SQL 时,大概率触发700 Invalid response: 500错误(尤其当服务器装了 WAF 或云防护) - 脚本内置的账号密码(如
USER_ACCOUNT = 'admin')要和 Navicat 中填写的 HTTP 用户名/密码一致;这里输错会直接返回 401,不会报 MySQL 相关错误
MySQL 连接参数该填 localhost 还是真实内网 IP
在 常规 选项卡里,主机 字段填的是 PHP 脚本运行环境要连的 MySQL 地址,不是你本地电脑要连的目标地址。也就是说:它描述的是“服务器自己怎么连自己的数据库”,而不是“你从哪连过去”。
- 绝大多数情况下填
127.0.0.1(不推荐localhost,避免 Unix socket 路径歧义) - 如果 MySQL 和 Web 服务不在同一台机器(比如 PHP 在 Nginx 服务器 A,MySQL 在另一台内网 B),这里就得填 B 的内网 IP(如
192.168.10.5),并确保 A 能 telnet 通 B 的 3306 端口 - 端口、用户名、密码全部按 PHP 脚本所在服务器的实际 MySQL 配置来填 —— 它们只被
ntunnel_mysql.php用来建立内网连接,对外不可见
为什么连接成功却看不到库,或执行 SQL 报错 1045
HTTP 通道建立成功 ≠ 数据库操作成功。常见现象是 Navicat 显示“连接成功”,但左侧对象树为空,或者双击表时报 Access denied for user(错误 1045)。这说明脚本已通,但 PHP 进程用的 MySQL 账号权限不足。
- 脚本里写的 MySQL 用户(即
常规页填的用户)必须拥有目标库的SELECT、INSERT等实际需要的权限,且host字段得匹配 —— 如果 MySQL 用户是'myuser'@'localhost',而 PHP 脚本用127.0.0.1连,就会因 host 不匹配被拒(MySQL 认为这是两个不同用户) - 快速验证方式:SSH 登进服务器,在命令行用同样账号密码执行
mysql -h 127.0.0.1 -u myuser -p -e "SHOW DATABASES;",结果和 Navicat 是否一致 - 别忽略字符集:如果 Navicat 的
高级页里Initial charset设成utf8,但 MySQL 服务端默认是utf8mb4,某些元数据查询可能静默失败 —— 建议统一设为utf8mb4
ntunnel_mysql.php 返回什么,比盲调快得多。

















