1. 程式人生 > >MySQL 超大表的刪除方法

MySQL 超大表的刪除方法

mysql 大表刪除

MySQL裏面直接對大表執行drop table刪除有可能導致mysql hang住。必須使用些特殊的方法。


先搞一個大表出來,如下圖:

技術分享


可以看到t2表的ibd大小為2.7GB

技術分享


1、創建個硬鏈接:

cd/bdata/data/nowdb2/test

ln t2.ibdt2.ibd_hdlk

技術分享


創建一個硬鏈接的好處就是

硬鏈接就是增加了對文件的引用,只有對磁盤上文件的引用完全沒有了的話,這個文件才能是刪除的。

我們對t2.ibd 建立硬鏈接後,當我們執行drop table t2;

的時候,實際上只是刪除了對t2.ibd的一個文件引用,我們t2.ibd_hdlk對物理文件的引用還是存在的,就不會執行OS級別的刪除操作,就不會大量的IO操作。這種對線上mysql的影響降到很低。

2、執行實際的刪除

droptable test.t2;

3、使用coreutils工具集執行OS級別的文件刪除

下載地址: ftp://alpha.gnu.org/gnu/coreutils/

tar xf coreutils-8.0.tar.xz

cdcoreutils-8.0

./configure

make && make install

清理腳本如下:

#!/bin/bash

TRUNCATE=/usr/local/bin/truncate

#2835MB2.7GB差不多在2768MB)開始每次刪除100MB,最後如果腳本truncate後還剩下部分文件,可以使用rm刪除

fori in `seq 2768 -100 10 `; do

$TRUNCATE -s ${i}M /bdata/data/nowdb2/test/t2.ibd_hdlk

sleep 1

done


執行完上面的腳本後,還剩下35MB的空間,如下圖。這個小文件我們直接使用rm刪除即可。

技術分享


這樣就徹底刪除掉這個t2大表了。



本文出自 “菜雞” 博客,請務必保留此出處http://lee90.blog.51cto.com/10414478/1928108

MySQL 超大表的刪除方法