記錄一次失敗的服務器問題排查。
1. 問題
環境:windows2012 、mysql 5.6
出現問題:重啟MySQL服務,顯示啟動成功,用第三工具連接時提示:錯誤碼2003 can't connect to mysql server on 'localhost' (10055);
通過cmd命令嘗試連接,還是無法連接。
首先確定mysql服務已經啟動了,如果未啟動就連接的話也會有這樣的錯誤提示。
2.排查並嘗試解決
第一反應先百度 can't connect to mysql server on 'localhost' (10055),得到參考,進行以下修改:
- 通過注冊表配置動態分配端口的最大值,在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters里加上如下的鍵值:
ValueName: MaxUserPort (有博主的情況是只修改這一項)
ValueType: DWORD
Valuedata: 65534
- 通過注冊表配置連接等待時間,在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters加上
鍵值:TcpTimedWaitDelay
數值類型:REG_DWORD - 時間(以秒為單位)
有效范圍:30-300(十進制)
默認值:0x78(十進制 120)
由於文章太多,我也記不清到底是參考哪位博主的了,有一位博主介紹了MaxUserPort和TcpTimedWaitDelay,鏈接地址:https://www.cnblogs.com/tianzhiliang/articles/2400176.html
可能是當時沒重啟服務器,做完以上修改后重啟MySQL服務后問題依舊存在。
3.梳理
關閉其他服務,只啟動MySQL數據庫的服務,通過命令netstat -ano查看當前已使用的端口,發現只有很少一部分。再次嘗試連接數據庫,問題依舊存在,此時我有點懵了。
選擇修改MaxUserPort和TcpTimedWaitDelay,是覺得沒有可用的連接才造成數據庫無法連接,可是現在根本就沒有占用多少連接,更懵了。
4.重啟大法
由於已經有用戶再使用該系統,所以只能先解決當前問題,無奈只能采用重啟大法,重啟后該問題不再復現。
5.總結
平時對服務器的操作就比較少,也是第一次遇見這個情況,雖然這次沒找到問題的原因,但是總結一下,如果再此發生這個問題也能有個思路。
- 先看數據庫的錯誤日志,在my.ini文件中(C:\ProgramData\MySQL\MySQL Server 5.6下),找到log-error="LAPTOP-KP8RB178.err"(C:\ProgramData\MySQL\MySQL Server 5.6\data下)。
- 還得排查端口占用情況,netstat -aon|findstr 3306命令,查看數據庫的TCP連接情況,如果很多狀態為TIME_WAIT的連接,關閉這些連接后再試試。
- 有位博主的建議是關閉防火牆,由於對服務器防火牆知識了解不多,我當時直接把Windows Firewall服務給關了,很尷尬,無法遠程了,這個方案做個備選吧。
- 數據庫版本和系統兼容問題,看了這篇文章后才有這個猜測,都是English,有些地方我肯定也沒整明白。
還有一些參考鏈接如下:
- mysql 10055如何解決
- Can't connect to MySQL server on 'XXXX' (10055) 解決方案
- Mysql數據庫日志配置
- https://www.cnblogs.com/studywithallofyou/p/13356986.html