情景復原:
某電腦昨天還能正常鏈接數據庫, 今天就提示鏈接不上, 提示bad handleshake錯誤
原因是服務器端口(3306)被佔用
藉機學習window下查看端口占用情況以及殺死進程的常用命令
分析:
1. 用navicat鏈接, 提示Access Denied, 按理來說一般是密碼錯誤, 可密碼是沒有問題的, 於是排除
2. 懷疑是不是mysql的服務沒有正常啓動, 於是打開服務可以看到, mysql的服務已經啓動, 但是由於裝了兩個版本mysql, 懷疑是服務啓動錯誤,啓動了另一個服務, 於是將原先服務停止, 切換到另一個mysql的服務, 重新嘗試連接, 最終還是失效了
盲區:
開發時, 一般端口被佔用是服務啓動服務的, 於是直接判斷端口沒有被佔用, 這是錯誤的
不知道爲啥3306端口被佔用, 還能啓動mysql的服務
下面關於查看端口占用情況以及殺死進程的常用命令, 最好背下來, 常用
1. 查看所有端口情況
netstat -ano
通過這個命令可以清晰的查看到3306被 PID爲3528的進程佔用了, 可以打開任務管理器, 找到詳細信息這一欄, 根據PID查找到這個進程, 如果是錯誤佔用,可以直接結束進程, 問題解決, 此時演示情況是正常情況。。。
比如我開啓啓動tomcat服務器, 可以通過netstat -ano查看8080端口被哪個進程佔用, 根據對應的PID可以找到相應進程
2. 查看被佔用端口對應的PID
netstat -ano | findstr 15038
這是用來查看進程號爲12538這個進程佔用的端口以及進程一些信息
3. 殺死進程
比如我們現在要在idea中啓動tomcat服務器, 發現提示端口已經被佔用, 於是我們通過netstat -ano查看端口占用情況, 發現8080端口被進程15036佔用了, 通過命令
tasklist
查看當前正在運行的所有進程
或者通過
tasklist | findstr 15036
可以確定15036進程對應這nodejs的服務, 原來是我在webstorm中啓動了nodejs. 於是纔會端口占用
通過命令殺死這個進程
比如可以使用
taskkill /f /t /im node.exe
提示進程成功殺死
重新查看端口占用情況
已經無法查看到8080端口的佔用情況了, 證明進程被成功殺死, 此時可以正常啓動tomcat服務器了