mysql刪除大表更快的drop table辦法
參考資料:
https://blog.csdn.net/anzhen0429/article/details/76284320
利用硬連接和truncate下降drop table對線上環境的影響
在DROP TABLE的時候,全部進程無論是DDL仍是DML都被HANG起;直到DROP結束才繼續執行;這是由於INNODB會維護一個全局獨佔鎖(在table cache上面),mysql
直到DROP TABLE完成才釋放。在咱們經常使用的ext3,ext4,ntfs文件系統,要刪除一個大文件(幾十G,甚至幾百G)仍是須要點時間的。sql
下面咱們介紹一個快速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來完成刪表動做,那麼這條語句要執行很長時間。此時即可以經過在該表對應的數據文件上設置硬連接來進行刪除。測試
一、若是是主從架構,請在全部機器上建立硬連接
建立方法都很簡單:
軟連接(符號連接) ln -s source target
硬連接 (實體連接)ln source target
spa
ln /data/mysql/mysql_3306/data/db222/t2.ibd /data/mysql/mysql_3306/data/db222/t2.ibd.hdlk
# 進入mysql,執行刪除表 drop table t2;
二、而後去操做系統中刪除真正的大物理文件
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)操作系統