MySQL大表清空和刪除正確方法
公司主營業(yè)務(wù):成都網(wǎng)站設(shè)計、成都網(wǎng)站制作、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出樺南免費做網(wǎng)站回饋大家。
刪除表中的數(shù)據(jù)的方法有delete,truncate, 其中TRUNCATE TABLE用于刪除表中的所有行,而不記錄單個行刪除操作。TRUNCATE TABLE 與沒有 WHERE 子句的 DELETE 語句類似;但是,TRUNCATE TABLE 速度更快,使用的系統(tǒng)資源和事務(wù)日志資源更少。
truncate 清空表數(shù)據(jù),50G的表大概需要20秒以上;
mysql> truncate table old_table;
mysql> rename table 原表名 to 新表名;
當(dāng)你執(zhí)行 RENAME 時,你不能有任何鎖定的表或活動的事務(wù)。你同樣也必須有對原初表的 ALTER 和 DROP 權(quán)限,以及對新表的 CREATE 和 INSERT 權(quán)限。
# 新建一個空表(測試);
mysql> create table old_table(id int);
# new_table克隆old_table的表結(jié)構(gòu);
mysql> create table new_table like old_table;
# old_table改名為backup_table,new_table改名為old_table;
mysql> RENAME TABLE old_table TO backup_table, new_table TO old_table;
# 刪除舊表及數(shù)據(jù);
mysql> DROP TABLE old_table;
在生產(chǎn)環(huán)境有可能有刪除某個不重要大表的需求,因為大表占用的大量磁盤空間,如果我們直接drop掉此表,通常需要20秒以上的時間,總會覺得會卡主MySQL,現(xiàn)在給大家一個正確的刪除方法。
# shell
[root@ras221 db]# du -shc old_table*
12K old_table.frm
49G old_table.ibd
[root@ras221 db]# ls -l old_table*
-rw-r----- 1 mysql mysql 9075 11月 8 11:39 old_table.frm
-rw-r----- 1 mysql mysql 52273610752 1月 10 14:12 old_table.ibd
[root@ras221 db]# ln old_table.ibd old_table.ibd.bak # 硬鏈接;
[root@ras221 db]# ls -l old_table*
-rw-r----- 1 mysql mysql 9075 11月 8 11:39 old_table.frm
-rw-r----- 1 mysql mysql 52273610752 1月 10 14:12 old_table.ibd
-rw-r----- 1 mysql mysql 52273610752 1月 10 14:12 old_table.ibd.bak
[root@ras221 db]#
# mysql
mysql> drop table old_table;
Query Ok, 0 rows affacted(0.92 sec)
通過這樣的操作,可以減少mysql drop大表hang住的時間,然后在業(yè)務(wù)低峰期再去刪除真實的那個.b文.bak件。
至于原理:
就是利用OS HARD LINK的原理,
當(dāng)多個文件名同時指向同一個INODE時,這個INODE的引用數(shù)N>1, 刪除其中任何一個文件名都會很快.
因為其直接的物理文件塊沒有被刪除.只是刪除了一個指針而已;
當(dāng)INODE的引用數(shù)N=1時, 刪除文件需要去把這個文件相關(guān)的所有數(shù)據(jù)塊清除,所以會比較耗時;
對于大表操作操作的其實幾個Tips:
可以先用rename table替代drop table
mysql> rename table old_table to old_table_bak;
這個動作也很快只是相當(dāng)于改一個文件名。
另外也可以考慮使用XFS文件系統(tǒng),對于Drop表動作也比較快。
本文名稱:MySQL大表清空和刪除正確方法
本文路徑:http://m.newbst.com/article2/ppieoc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、虛擬主機、外貿(mào)網(wǎng)站建設(shè)、App開發(fā)、網(wǎng)站排名、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)