利用硬鏈接原理秒刪MySQL大文件 原理: 硬鏈接基礎 當多個文件共同指向同一inode、inode鏈接數N>1、刪除任何一個文件都是巨快 因為、此時刪除的僅僅是指向inode的指針 而當N=1時、則不一樣了、此時刪除的文件相關的所有數據塊、所以慢 測試:
[plain] root@ # ln stock.ibd stock.id.hdlk root@ # ls stock.* -l -rw-rw—- 1 mysql mysql 9196 Apr 14 23:03 stock.frm -rw-r–r– 2 mysql mysql 19096666112 Apr 15 09:55 stock.ibd -rw-r–r– 2 mysql mysql 19096666112 Apr 15 09:55 stock.id.hdlk 你會發現stock.ibd的INODES屬性變成了2;
下面我們繼續來刪表。
[email protected] : test 21:44:37> show table status like ‘stock’ \G *************************** 1. row *************************** Name: stock Engine: InnoDB Version: 10 Row_format: Compact Rows: 49916863 Avg_row_length: 356 Data_length: 17799577600 Max_data_length: 0 Index_length: 1025507328 Data_free: 4194304 Auto_increment: NULL Create_time: 2011-05-18 14:55:08 Update_time: NULL Check_time: NULL Collation: utf8_general_ci Checksum: NULL Create_options: Comment: 1 row in set (0.23 sec) [email protected] : test 21:39:34> drop table stock ; Query OK, 0 rows affected (0.99 sec)
1秒不到就刪除完成; 也就是DROP TABLE不用再HANG這麼久了。 但table是刪除了,數據文件還在,所以你還需要最後數據文件給刪除。
root # ll total 19096666112 -rw-r–r– 2 mysql mysql 19096666112 Apr 15 09:55 stock.id.hdlk root # rm stock.id.hdlk
最後一步刪除原始大文件也可以選擇rsync來刪除、比rm快多了:rsync秒刪大文件 http://www.BkJia.com/os/201304/203155.html