前言
删除表,大家下意识想到的命令可能是直接使用DROP TABLE "表名"
,这是初生牛犊的做法,因为当要删除的表达空间到几十G,甚至是几百G的表时候。这样一条命令下去,MySQL可能就直接夯住了,外在表现就是QPS急速下降,客户请求变慢。
解决办法1.业务低峰时间手动执行删除
这个可能就需要DBA不辞辛劳,大晚上爬起来删表了。
2.先清除数据,最后再删除的方式
譬如1000万条数据,写脚本每次删除20万,睡眠一段时间,继续执行。这样也能做到对用户无感知。
3.对表文件(idb文件)做一个硬链接来加速删除
这个方法利用了linux下硬链接的知识mysql删除表,来进行快速删除,不记得话可以回去翻一下《鸟哥的linux私房菜》
ln?data_center_update_log.ibd?data_center_update_log.ibd.hdlk
[root@mysql01?sports_center]#?ll 总用量?19903792 -rw-r-----?1?mysql?mysql???????9076?10月?17?13:15?data_center_update_log.frm -rw-r-----?2?mysql?mysql?8447328256?12月?23?11:35?data_center_update_log.ibd -rw-r-----?2?mysql?mysql?8447328256?12月?23?11:35?data_center_update_log.ibd.hdlk
4.登陆mysql,执行drop表操作
很快,200万条数据只用了1秒完成,此操作是在创建硬链接后执行的 mysql>?drop?tables?data_center_update_log; Query?OK,?0?rows?affected?(1.02?sec)
mysql>?exit Bye
退出来,再次查看数据目录,发现就只剩data_center_update_log.ibd.hdlk硬链接文件了 [root@mysql01?sports_center]#?ll 总用量?19903792 -rw-r-----?2?mysql?mysql?8447328256?12月?23?11:35?data_center_update_log.ibd.hdlk
5.如何正确删除ibd.hdlk
硬链接文件呢5.1 安装truncate
命令
[root@mysql01?~]#?cruncate -bash:?cruncate:?未找到命令 通常操作系统会安装truncate命令,该命令在coreutils安装包里面,如果没有安装可以使用下面命令安装
[root@mysql01?~]#?yum?provides?truncate coreutils-8.22-24.el7.x86_64?:?A?set?of?basic?GNU?tools?commonly?used?in?shell?scripts 源????:base 匹配来源: 文件名????:/usr/bin/truncate
可以看到truncate由coreutils安装包提供,下面安装coreutils安装包:
[root@mysql01?~]#?yum?install?-y?coreutils
5.2 truncate
常用选项
-c,?--no-create?-->?不创建任何文件? -o,?--io-blocks?-->?将大小视为存储块的数量,而不是字节? -r,?--reference=RFILE?-->?参考指定的文件大小? -s,?--size=SIZE?-->?按照指定的字节设置文件大小?
5.3 truncate_bigfile.sh脚本
#!?/bin/bash #
TRUNCATE=/usr/bin/truncate FILE=$1
if?[?x"$1"?=?x?];then ?echo?"Please?input?filename?in" ?exit?1; else ?SIZE_M=$(du?-sm?"$1"?|?awk?'{print?$1}')
?for?i?in?$(seq?"${SIZE_M}"?-100?0) ?do ??sleep?1 ??echo?"${TRUNCATE}?-s?${i}M?${FILE}" ??${TRUNCATE}?-s?"${i}"M?"${FILE}" ?done fi
if?[??$??-eq?0?];then ????????\rm?-f?"${FILE}" else ????????echo?"Please?check?file" fi
因为有悔,所以披星戴月;因为有梦,所以奋不顾身!个人博客首发:easydb.net
(编辑:武汉站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|