mysql刪除大表更快的drop table辦法


mysql刪除大表更快的drop table辦法


參考資料:
https://blog.csdn.net/anzhen0429/article/details/76284320

  利用硬鏈接和truncate降低drop table對線上環境的影響

  在DROP TABLE的時候,所有進程不管是DDL還是DML都被HANG起;直到DROP結束才繼續執行;這是因為INNODB會維護一個全局獨占鎖(在table cache上面),

直到DROP TABLE完成才釋放。在我們常用的ext3,ext4,ntfs文件系統,要刪除一個大文件(幾十G,甚至幾百G)還是需要點時間的。

  下面我們介紹一個快速DROP table 的方法; 不管多大的表,INNODB 都可以很快返回,表刪除完成;

[root@my1-222 ~]# ll  /data/mysql/mysql_3306/data/db222/t2* -th
-rw-r-----. 1 mysql mysql 2.0G May 29 22:39 /data/mysql/mysql_3306/data/db222/t2.ibd
-rw-r-----. 1 mysql mysql 8.5K May 29 21:51 /data/mysql/mysql_3306/data/db222/t2.frm
[root@my1-222 ~]# 


直接使用DROP TABLE來完成刪表動作,那么這條語句要執行很長時間。此時便可以通過在該表對應的數據文件上設置硬鏈接來進行刪除。

1、如果是主從架構,請在所有機器上創建硬鏈接

創建方法都很簡單:
軟鏈接(符號鏈接) ln -s   source  target
硬鏈接 (實體鏈接)ln       source  target

ln /data/mysql/mysql_3306/data/db222/t2.ibd  /data/mysql/mysql_3306/data/db222/t2.ibd.hdlk
# 進入mysql,執行刪除表
drop table t2;


2、然后去操作系統中刪除真正的大物理文件

for i in `seq 50 -1 1 ` ;do sleep 2;truncate -s ${i}G /data/mysql/mysql_3306/data/db222/t2.ibd.hdlk;done  
rm -rf /data/mysql/mysql_3306/data/db222/t_user.ibd.hdlk  


從2G開始,每次縮減1M,停2秒,繼續直到文件只剩1G,最后使用rm命令刪除剩余的部分。
(文件越大,越能體現出來,這里是測試,文件只有2G,可以將其修改為M)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM