overview
之前在工作中调试时建了一个每分钟执行一次的cron定时任务,每分钟均产生一个带时间信息的表名称,并忘了删除这个定时任务,待发现时已经有将近3000个新建的表了,由于单条单条地删除很慢,现需要批量删除这些带时间信息的表。
theory&&measure
theory
1 登陆mysql的information数据库,查找tables表,找出需要删除的表所在的数据库下的 所有符合时间要求的表名称
2 将查询出来的表名称拼接成drop table指令数据的形式,例如
drop table weekly_with_you_2014_12_28;
3 登陆到mysql的yc_market数据库,执行上一步输出的所有drop指令
measure
具体实现非常简单,只需要在linux终端敲入如下命令:
[jiangjianjian@h6 ~]$ echo "select concat(‘drop table ‘, table_name ,‘;‘) from TABLES where TABLE_SCHEMA =‘yc_market‘ and table_name like ‘weekly_with_you_2014%‘ ;" | mysql -uroot -p123456 -h127.0.0.1 information_schema |
sed -n ‘2,$p‘ | mysql -uroot -p123456 -h127.0.0.1 yc_market
其中yc_marke是需要删除的表所在的数据库
sed命令用来跳过产生的所有的drop table指令中的第一行,因为第一行是无效的