Mysql
刪除 1TB Mysql 表以釋放磁碟空間後如何從 MySql 中刪除文件句柄?
在我們的生產系統上,我們最近刪除了一個 1TB 表。刪除完成後,表在 mysql 中消失了,但文件仍然存在於 /lib/mysql/dbname/ 文件夾中。(我們使用每個表設置一個文件)我刪除了與表關聯的文件。
所以我檢查了
lsof | grep crawl_link | grep deleted
發現mysql程序還有打開的句柄
mysqld 38115 mysql 11uW REG 8,3 1016938364928 182524780 /var/lib/mysql/seobility/_crawl_links_new.ibd (deleted) mysqld 38115 2110 mysql 11uW REG 8,3 1016938364928 182524780 /var/lib/mysql/seobility/_crawl_links_new.ibd (deleted) mysqld 38115 4530 mysql 11uW REG 8,3 1016938364928 182524780 /var/lib/mysql/seobility/_crawl_links_new.ibd (deleted) mysqld 38115 8192 mysql 11uW REG 8,3 1016938364928 182524780 /var/lib/mysql/seobility/_crawl_links_new.ibd (deleted) (Total 120 Lines)
我知道這個問題可以通過重新啟動 MySql 來解決,但是我們的數據庫執行在 2TB+,我真的很想避免停機。
有沒有辦法刪除文件句柄並釋放佔用的磁碟空間?
顯而易見的解決方案是殺死(或重新啟動)持有文件描述符的程序(程序 ID 38115,如
lsof
輸出所示)。如果您不想這樣做,您可以截斷文件(即使它已被刪除)以釋放磁碟空間。您可以嘗試以下方法:
$ :> /proc/38115/fd/11
38115
程序 ID 和11
文件描述符在哪裡。需要時不要忘記以 root 身份執行。