解決Can't connect to MySQL server on 'localhost' (10048), 一般見於使用mysql的windows 2003服務器.
錯誤的出現的原因:
應用程序需要快速釋放和創建新連接, 但是由於 TIME_WAIT 中存在的連接超過默認值,導致較低吞吐量.
解決方案:
和本錯誤密切相關的兩個windows的注冊表項:TcpTimedWaitDelay和MaxUserPort的值.
TcpTimedWaitDelay 確定 TCP/IP 可釋放已關閉連接並重用其資源前, 必須經過的時間. 關閉和釋放之間的此時間間隔通稱 TIME_WAIT 狀態或兩倍最大段生命周期(2MSL)狀態. 此時間期間, 重新打開到客戶機和服務器的連接的成本少於建立新連接. 減少此條目的值允許 TCP/IP 更快地釋放已關閉的連接, 為新連接提供更多資源.
MaxUserPort 確定從系統請求任何可用用戶端口時所用最大端口數,TCP/IP 可指定的最高端口號. 如果建立 TCP 連接最大端口連接大於 5000, 本地計算機響應以下錯誤信息WSAENOBUFS (10055): 因為系統缺乏足夠緩沖區或者因為隊列已滿而無法執行套接字上操作, 從而導致應用程序的10048錯誤.
打開注冊表編輯器regedit
TcpTimedWaitDelay 設置:
找到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ Services\TCPIP\Parameters 注冊表子鍵
並創建名為 TcpTimedWaitDelay 的新 REG_DWORD 值
設置此值為十進制 30, 十六進制為 0×0000001e
該值等待時間將是 30 秒。
本項的默認值:0xF0(16進制), 等待時間設置為 240 秒
MaxUserPort 設置(增加最大值端口連接):
找到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ Services\TCPIP\Parameters 注冊表子鍵
並創建名為 MaxUserPort 的新 REG_DWORD 值
設置此值為十進制最低 32768
該值等待時間將是 30 秒。
重啟windows系統。
本項的默認值:5000(十進制)
關閉注冊表編輯器, 重啟windows系統。
作者 zhenther