| 前言 删除表,大家下意识想到的命令可能是直接使用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 (编辑:鹰潭站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |