Mysql

刪除 1TB Mysql 表以釋放磁碟空間後如何從 MySql 中刪除文件句柄?

  • October 6, 2016

在我們的生產系統上,我們最近刪除了一個 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 身份執行。

引用自:https://serverfault.com/questions/807227