美文网首页MySQL(总)
在线删除大表(完结)

在线删除大表(完结)

作者: 飞翔的Tallgeese | 来源:发表于2018-12-20 14:24 被阅读0次

    几周之前搭建完anemometer之后并没有对其进行维护,最近查询中间库的空间时发现anemometer下面对应的slow_query_log库文件已经达到了127G之多

    测试库上难得看到这么大的表,干脆用来实验一下在线删除大表


    在线直接干58G的大表

    直接在线上drop 58G的那张表,通过iostat -dxm 5可以看到画风是下图这样的

    与此同时这个操作让中间库几乎是hang住了,连登陆都在等待

    这个drop的操作持续了将近2分钟


    正确姿势干70G大表

    #进入到表空间路径下,制作硬连接

    ln global_query_review_history.ibd global_query_review_history.ibd.h

    ln global_query_review_history.frm global_query_review_history.frm.h

    #登陆MySQL执行drop table,这里的操作是秒删

    drop table global_query_review_history;

    操作之后就只剩下硬链接了

    如果用rm去删除的话,在高峰期还是会对I/O造成影响

    采用truncate命令去删除大表(也可以选一个业务低峰期去rm硬链接)

    truncate -s 0 global_query_review_history.ibd.h

    truncate -s 0 global_query_review_history.frm.h


    PS:truncate这个语法也挺恐怖的,跟rm一样危险而且我们日常使用比较少,之前参照野鸡文章的做法去执行了一下操作,测试库的所有文件都被削减了。

    稳妥起见,建议在前一步做ln的时候,把硬链接做到一个单独的文件夹下,避免truncate的误操作

    相关文章

      网友评论

        本文标题:在线删除大表(完结)

        本文链接:https://www.haomeiwen.com/subject/rptykqtx.html