虛擬主機環境下 MySQL 連線頻繁失敗(Can't connect to MySQL server),空間商甩鍋程式問題。本文記錄從 mysql_connect 改 mysql_pconnect、優化查詢、減少連線數、改用 localhost 等嘗試過程,最終鎖定主機名解析為關鍵。
mysql_pconnect(持久連線) → 正常半月pconnect 也失效連線字串使用 Host=域名或IP 時:
-- 錯誤寫法
$conn = mysql_connect('db.example.com', 'user', 'pass');
$conn = mysql_connect('192.168.1.100', 'user', 'pass');
-- 正確寫法(同機房)
$conn = mysql_connect('localhost', 'user', 'pass');
✅ localhost 會走 Unix Socket(Linux)或 Named Pipe(Windows),**繞過網路層**,不經 DNS、不經閘道、不佔用 TCP 連接埠。
| 問題 | 方案 |
|---|---|
| 單頁查詢過多 | 合併查詢、使用 JOIN、避免迴圈中查詢 |
| 無連線池 | PHP 用 mysqli / PDO + 持久連線或連線池 |
| 慢查詢堵塞 | 啟用 Slow Query Log、加索引、EXPLAIN 分析 |
| 連線未釋放 | 確保 finally / defer 關閉連線 |
localhostmax_connections、Thread_running、Aborted_connects 狀態💡 同機房資料庫連線,**永遠優先使用 localhost**。