許多虛擬主管/雲服務器出於安全考慮,禁止 MySQL 3306 端口遠程訪問,僅允許本地連接。本文詳解如何使用 Navicat 的 HTTP 隧道功能,通過部署在服務器上的 PHP 腳本代理連接數據庫。
打開 Navicat → 左上角「連接」→ 選擇 MySQL → 彈出「新建連接」對話框。
| 字段 | 填寫值 | 說明 |
|---|---|---|
| 連接名 | 自定義,如「生產環境-HTTP隧道」 | 便於識別 |
| 主機名/IP | localhost | **必須填 localhost**,因為 PHP 腳本在服務器本地連接 MySQL |
| 端口 | 3306 | 默認 |
| 用戶名 | 你的數據庫用戶名 | 如 root、app_user |
| 密碼 | 你的數據庫密碼 |
https://your-domain.com/ntunnel_mysql.php
ntunnel_mysql.phpntunnel_mysql.php,或修改連接配置中的隧道地址對應新文件名點擊「測試連接」,稍等片刻(首次需經過 HTTP 請求轉發),顯示「連接成功」即可。
Navicat (本地)
│ HTTPS/HTTP 請求
▼
Web Server (nginx/Apache + PHP)
│ 執行 ntunnel_mysql.php
│ 解析請求 → 建立本地 MySQL 連接 → 轉發協議
▼
MySQL (localhost:3306) ←── 內網通信,無需開放 3306
| 現象 | 原因 | 解決 |
|---|---|---|
| 連接超時 | PHP max_execution_time 過短 | 修改 php.ini: max_execution_time = 300 |
| 提示「Access denied」 | 數據庫用戶無本地登錄權限 | GRANT ALL ON *.* TO 'user'@'localhost' IDENTIFIED BY 'pwd' |
| 文件 404 | 腳本未上傳或路徑錯誤 | 確認文件在 Web 根目錄,URL 可直接訪問 |
| 亂碼 | 字符集不一致 | 腳本中設置 mysqli_set_charset($link, 'utf8mb4') |
ntunnel_mysql.php 為難以猜測的名稱(如 db_tunnel_x7k9.php),同步修改 Navicat 配置HTTP 隧道雖引入少量延遲(通常 <200ms),但極大提升了安全性,是受限環境下管理遠程 MySQL 的標準解法。