MySQL連線錯誤(10048)的解決方案

xingfei80發表於2014-04-23

解決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 秒。
重啟系統。
本項的預設值:5000(十進位制)
 
關閉登錄檔編輯器, 重啟windows系統。
 
 
作者 zhenther

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14663377/viewspace-1147564/,如需轉載,請註明出處,否則將追究法律責任。

相關文章