首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 連線頻繁失敗排查:主機名解析、連線池、流量與優化

     編輯:MySQL 資料庫相關知識

虛擬主機環境下 MySQL 連線頻繁失敗(Can't connect to MySQL server),空間商甩鍋程式問題。本文記錄從 mysql_connect 改 mysql_pconnect、優化查詢、減少連線數、改用 localhost 等嘗試過程,最終鎖定主機名解析為關鍵。

現象時間線

  • 半年前正常
  • 近半年:週 1-2 次失敗,重啟 MySQL 復原
  • 改 mysql_pconnect(持久連線) → 正常半月
  • 流量回升後:天天失敗,pconnect 也失效
  • 優化每頁查詢數至 1-2 個 → 仍失敗

關鍵發現:主機名解析問題

連線字串使用 Host=域名或IP 時:

  • 需經 DNS 解析或經過閘道器
  • DNS/閘道故障 → 連不上本機埠
  • 虛擬主機環境常見:共用 IP、DNS 不穩

解決方案:改用 localhost

-- 錯誤寫法
$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 關閉連線

給空間商的證據清單

  • 同主機其他網站正常 → 不代表資源足夠,可能他們用 localhost
  • 要求提供 MySQL max_connections、Thread_running、Aborted_connects 狀態
  • 要求檢查 DNS/閘道穩定性
💡 同機房資料庫連線,**永遠優先使用 localhost**。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved