前幾個月遇見了一個線上故障。
在mysql drop了一張大表后,空間竟然沒有釋放。從占用的空間來看,drop此表后,磁盤占用應該會有明顯的下降。
記錄一下解決過程
mysql版本:5.7
1.首先ps -ef | grep mysql 拿到mysql的pid
2.然后lsof -p `pid of mysql` |grep delete
3.顯然你不可能用重啟數據庫的方式來解決這個問題。
4.找到第二步結果中所有的fd。去到/proc/`pid of mysql`/fd/下。將2中所有的fd全部rm掉。
5.df -lh發現空間已經釋放。
此外,這個操作還是要結合具體場景。比如說你是個從庫,那么完全可以找個時間重啟。又或者並不是刪除表空間沒有釋放,而且其他情景,比如我還見過slow log沒有釋放空間,那么可以通過flush log解決。
判定這種情況的出現,可以通過df -lh和du命令結合。如果對於某一文件夾,兩個命令計算出來的大小不一致。基本可以判定文件句柄沒有釋放。