記升級mysql後的一次故障
一、問題背景
接上級要求,某生產數據庫需要實施備份;剛好漏洞掃描報告出來,mysql 版本需要升級到5.7.20,於是就未雨綢繆,先寫腳本。腳本在mysql舊版本下完全可用(未升級前,mysql 為5.7.18)。升級完後,本著技術人員的一種嚴謹態度,絕對要sh -x 看看腳本在新環境下有沒有出現異常啦~~~
二、現象(主要有兩個) 1、mysqldump只能備份表不能備份庫(Z庫和S庫),剛好測試時用的是S庫!(這個強調下面是有用的,觀眾慢慢欣賞)。開始非常納悶,兩個庫才不到100M,mysqldump良久不出結果,總不能僅僅1~2天,生產庫上數據量陡增的 2、與此同時,測試人員反饋,項目頁面一直轉圈登不上(前一天剛升級完數據庫,測試過,頁面打開沒問題)
三、排查及解決
1、上頭說,可能是因為升級後 tomcat 沒有重啟,導致應用出問題(ps:數據庫跟應用分別在兩臺不同的機器上),於是就重啟 tomcat ~~順帶觀察實時日誌:tail -f Catalina.out
(1)圖一
(2)圖二
綜上,可以發現,挺多preparing的。。。然當時其實看不出有什麽異樣(畢竟太年輕,囧)
2、之後,開發人員拿到數據庫賬號密碼,說S庫的某個表,也就是上圖的日誌表:TB_ICT_SYS_LOG被鎖了!這就是為什麽mysqldump測試備份S庫的時候一直備份不了,如果測試備份Z庫的話,結果估計是可以出來的,因為Z庫上的表並沒有被鎖
登陸數據庫查線程運行情況,終於有眉目了!!!
(1)圖一 (mysqldump不了S庫的線程)
(2)圖二 (頁面登陸不上卡住報錯的線程)
3、解決:根據查到的進程號, kill 掉數據庫鎖進程
之後,數據庫恢復正常,頁面打開沒問題
四、結論
1、瀏覽器登陸項目頁面,無論登陸是否成功,都有一個第三點 1(2)圖二的插入S庫日誌表的操作
2、mysqldump備份數據庫會有鎖表的問題,可能會和插入操作有沖突(開發人員:業務上並沒有其他地方引起鎖表操作),所以這次問題的產生好可能是因為在調試腳本的時候引起的。為了不影響業務,建議晚上備份(現在調度已改成淩晨 0 點備份)
3、確定Tomcat數據庫連接池配置是否準確無誤(.../WEB-INF/classes/jdbc.properties),雖然跟本次排錯過程無關
這個日誌是tomcat最早時候的信息(暫時不知道這裏是不是暗藏問題發生的玄機)
記升級mysql後的一次故障