db連接失敗?
首先,你要搞清楚,“某系統連接db”是怎么樣的一個流程。step1(簡稱s1):某系統自身發起連接
s2:連接建立的過程本身
s3:請求發送到DB并進行處理
s4:DB返回結果給某系統
s5:某系統成功接收并展示結果
這就簡單的一個流程。上面的每個環節都可能出問題,所以你要按步驟,有條理的排除沒問題的步驟,然后放大有問題的步驟,直到找到最后的root cause。
那么,怎么排除沒問題的步驟,放大有問題的步驟呢?還是繼續上面的例子。
首先我們來確認s1是不是正常的,采取一個極端的辦法,就是換一個完全不同環境但是配置完全一模一樣的db,看某系統是否可以連接上這個db,如果可以,那就證明這個問題確實是和舊的db有關系的,和某系統自身無關。(這樣就通過替換db來確認了問題點不在s1步驟)
那就開始排查s2,連接建立的過程本身,這個也是有很多層次的。
比如首先可能是網絡的問題(為什么首先想到是網絡,這是經驗,你稍微有點積累就懂。),網絡問題又有很多層次,比如防火墻,路由,干擾 ,硬件故障等等。
其次可能是應用的問題,比如某系統去連db的過程,在程序層面上,是一個java程序去連接一個mysql,那是不是java的連接程序自身不支持mysql的版本?
還有可能是更表層的問題,比如是不是你連接的密碼就沒有配置對?
還有其他可以抽象的一個問題的層次等等。
總結一下:其實就是知道這個連接的流程,然后再一個一個環節去追查,有異常就逮住不放追查到底,知道找到根源。
防坑指南:不是所有問題都能找到root cause,根據個人的水平,知識層次,找到問題的效率和精度是不一樣的。比如一個人有病,一個普通醫生能查到是肝不好,一個中級醫生能不僅查到是肝不好,而且知道是肝的某些細胞不好,一個高級醫生一樣能查到是肝不好,也能查到是肝的某些細胞不好,還能找到那些細胞是由于某種病毒感染了所以不好。這就是層次不同,深度不同。
但是,要記住,最終都是要解決問題。所以假設有一種廣譜藥,可以治療一系列常見的肝病,而且這三個醫生都會用(計算機服務器的問題的廣譜藥就是重啟服務器啦,重裝軟件啦這些),那其實最終的治療效果都是一樣的(重啟后問題就解決了。)
你的問題是提到運維區里面,想必也是同行,那記得務必記住,遇到問題的時候,首要的是解決問題(把病治好),那就要快,不要為找原因一條路走到底,一條路知道不行就要趕緊換路。