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

解決 PHP 後台頻繁「無法連接 MySQL」刷新即恢復的兩大方案

     編輯:MySQL 資料庫相關知識

問題現象

PHP 應用間歇性報錯 Can't connect to MySQL server,刷新頁面即恢復。高併發下頻發,嚴重影響可用性。

方案一:卸載 Windows 更新 KB967723 (已驗證有效)

  1. 控制台 → 程式和功能 → 檢視已安裝的更新
  2. 找到 KB967723 → 解除安裝
  3. 重啟資料庫服務器

原理:該補丁修改 TCP/IP 協議棧行為,導致大量短連線下臨時端口耗盡、TIME_WAIT 積壓,引發連線失敗。

方案二:修改登錄擴大臨時端口範圍 (微軟官方建議)

  1. 執行 regedit
  2. 定位:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
  3. 新建 DWORD 值:
    名稱:MaxUserPort
    值:65534 (十進制,範圍 5000-65534)
    預設:0x1388 (5000)
  4. 重啟作業系統生效

原理:預設僅 5000 個臨時端口 (1024-5000),高併發短連線快速耗盡。擴大至 65534 大幅降低端口耗盡機率。

輔助優化建議

  • 連線池:PHP 使用持久連線 (mysqli:p: 前綴) 或專用連線池 (ProxySQL, PgBouncer 類產品) 減少建連開銷。
  • wait_timeout / interactive_timeout:縮短 (如 60s) 加速釋放閒置連線。
  • net.ipv4.tcp_tw_reuse = 1, net.ipv4.tcp_tw_recycle = 1 (Linux 內核參數,慎用 NAT 環境)。
  • 監控 netstat -an | grep TIME_WAIT | wc -l 觀察端口佔用趨勢。

方案對比

根治建議

架構層面採用**連線池 + 讀寫分離 + 快取層**,從源頭減少資料庫短連線風暴,而非單純調整作業系統參數治標不治本。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
方案優點缺點適用場景
卸載 KB967723徹底解決、無副作用失去補丁安全性修復內網、可控環境
擴大 MaxUserPort保留補丁、標準做法需重啟 OS、端口仍有上限生產環境、需合規