mysql大表清空和刪除正確方法
1 清空大表
1.1 truncate
刪除表中的資料的方法有delete,truncate, 其中truncate table用於刪除表中的所有行,而不記錄單個行刪除操作。truncate table 與沒有 where 子句的 delete 語句類似;但是,truncate table 速度更快,使用的系統資源和事務日誌資源更少。
truncate 清空表資料,50g的表大概需要20秒以上;
mysql> truncate table old_table;
1.2 rename
1.2.1 格式:
mysql> rename table 原表名 to 新錶名;
當你執行 rename 時,你不能有任何鎖定的表或活動的事務。你同樣也必須有對原初表的 alter 和 drop 許可權,以及對新錶的 create 和 insert 許可權。
1.2.2 例項
# 新建乙個空表(測試);
mysql> create table old_table(id int);
# new_table轉殖old_table的表結構;
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;
# 刪除舊表及資料;
mysql> drop table old_table;
2 刪除
2.1 背景
在生產環境有可能有刪除某個不重要大表的需求,因為大表占用的大量磁碟空間,如果我們直接drop掉此表,通常需要20秒以上的時間,總會覺得會卡主mysql,現在給大家乙個正確的刪除方法。
2.2 首先我們檢視此大表
# 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住的時間,然後在業務低峰期再去刪除真實的那個.b文.bak件。
至於原理:
就是利用os hard link的原理,
當多個檔名同時指向同乙個inode時,這個inode的引用數n>1, 刪除其中任何乙個檔名都會很快.
因為其直接的物理檔案塊沒有被刪除.只是刪除了乙個指標而已;
當inode的引用數n=1時, 刪除檔案需要去把這個檔案相關的所有資料塊清除,所以會比較耗時;
對於大表操作操作的其實幾個tips:
可以先用rename table替代drop table
mysql> rename table old_table to old_table_bak;
這個動作也很快只是相當於改乙個檔名。
另外也可以考慮使用xfs檔案系統,對於drop表動作也比較快。
mysql清表資料
delete from 表名 truncatetable 表名 不帶where引數的delete語句可以刪除mysql表中所有內容,使用truncate table也可以清空mysql表中所有內容。效率上truncate比delete快,但truncate刪除後不記錄mysql日誌,不可以恢復資料。...
清空mysql表資料
delete from 表名 truncate table 表名 不帶where引數的delete語句可以刪除mysql表中所有內容,使用truncate table也可以清空mysql表中所有內容。效率上truncate比delete快,但truncate刪除後不記錄mysql日誌,不可以恢復資料...
Mysql定時清空表
1.設定開啟event scheduler set global event scheduler 1 2.驗證event scheduler是否已經開啟 show variables like event 值為 on 表明已開啟 show variables like event scheduler...