当前位置:首页 > mysql > 正文内容

mysql中超大表的删除方法

phpmianshi4年前 (2017-06-02)mysql84

在mysql中遇到一个大表,大概有17G左右,删除这张表。通常的删除操作可以通过delete、drop、truncate操作,但是有可能导致mysql hang住,必须使用些特殊的方法。

1、建立硬链接

找到mysql的数据文件,找到这张表在硬盘上的名称,我的是tmplst.frm和tmplst.ibd,通过查看tmplst.ibd的大小到了17G左右,这就是无法删除的原因。其中tmplst是表名。

在这个文件夹下,为tmplst,frm和tmplst.ibd分别建立硬链接

ln tmplst.frm tmplst.frm.h
ln tmplst.ibd tmplst.ibd.h

这样的话就成功的建立了两个硬链接。

创建一个硬链接的好处就是:

硬链接就是增加了对文件的引用,只有对磁盘上文件的引用完全没有了的话,这个文件才能是删除的。当我们执行drop table 的时候,实际上只是删除了对tmplst.ibd的一个文件引用,我们 tmplst.ibd.h对物理文件的引用还是存在的,就不会执行OS级别的删除操作,就不会大量的IO操作。这种对线上mysql的影响降到很低。

2、删除表

在mysql中使用drop命令删除表

drop table tmplst;

这时发现删除非常快,不到一分钟删除完成。

3、删除硬链接文件

在硬盘上删除新建的硬链接。分别删除tmplst.frm.h和tmplst.ibd.h

rm -rf tmplst.frm.h
rm -rf tmplst.idb.h

最后,成功了删除一张大表(17G左右)。


这样第三步还是会执行大量的io操作,我们可以用下面的办法继续优化


4.使用coreutils工具集执行OS级别的文件删除

wget 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
#从2835MB(2.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删除即可。


版权声明:本文由PHP面试资料网发布,如需转载请注明出处。
分享给朋友:

相关文章

mysql中找出无用的索引或重复索引

背景MySQL允许在相同列上创建重复的索引,但这样做对数据库却是有害而无利的,需要定期检查此类重复索引以改善数据库性能。可减少磁盘空间占用、减少磁盘IO、减少优化器优化查询时需要比较的索引个数、减少数...

mysql中order by的实现与优化

mysql中order by的实现与优化

概念在 MySQL 中,ORDER BY 的实现有如下两种类型: ◆ 一种是通过有序索引而直接取得有序的数据,这样不用进行任何排序操作即可得到满足客户端 要求的有序数据返回给客户端; ◆ 另外一种则需...

mysql中长事务详解

什么是长事务运行时间比较长,长时间未提交的事务,也可以称之为大事务。这类事务往往会造成大量的阻塞和锁超时,容易造成主从延迟,要尽量避免使用长事务。下面我将演示下如何开启事务及模拟长事务:#假设我们有一...

innodb中内存管理机制BufferPool

innodb中内存管理机制BufferPool

内存结构InnoDB主索引是聚簇索引,索引与数据共用表空间,对于InnoDB而言,数据就是索引,索引就是数据。InnoDB缓存机制和MyISAM缓存机制的最大区别就是在于,InnoDB不仅仅是缓存索引...

mysql中explain分析sql详解

Explain举例mysql> explain select * from event;  +—-+————-+——-+——+————...

mysql中AnalyzeTable优化

Analyze TableMySQL的Optimizer(优化元件)在优化SQL语句时,首先需要收集一些相关信息,其中就包括表的cardinality(可以翻译为“散列程度”),它表示某个索引对应的列...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。