1. 程式人生 > >記一次處理mysql資料庫無故鎖表的經歷

記一次處理mysql資料庫無故鎖表的經歷

某日,生產環境上的使用者表突然無故鎖表,原以為只是偶發的bug。所以第一時間想到的解決方案簡單粗暴:重啟資料庫(service mysqld restart)。問題得以解決。

10min後,該表再次鎖表。終於意識到問題並沒有那麼簡單。

經過多方查資料,各種嘗試。比如kill程序等方法,均無效。

最終看到一個,有可能是因為磁碟空間不足的原因,瞬間感覺就是它了。

df -h檢視伺服器磁碟佔用情況,果然used已經100%了(沒有做磁碟空間佔用預警^-^!!)。

只能刪除大檔案了,一般tomcat的logs目錄下的catalina.out檔案都特別大。

一查,果然已經有15個G之多了。rm -f catalina.out 刪除檔案。

再用df -h檢視磁碟佔用情況。並沒有任何改變。

經多方查證發現:刪除正在使用中的檔案時,系統不會立即釋放檔案所佔空間。

此時可通過:
1、重啟(生產環境重啟,萬一起不來呢。況且還是大晚上在家加班,起不來還得連夜處理。直接pass)
2、kill掉刪除檔案的程序
     lsof |grep deleted    查詢刪除檔案的程序(第二列是程序id,最後一列是刪除檔案的路徑)

     kill -9 程序id  (刪除對應的程序)

再次df -h檢視磁碟佔用情況,磁碟空間已釋放。

另外,鎖表的問題還導致,主從同步停止。

重置主從同步,參考另一篇文章連結

&n