MySQL批量刪除表
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指令中的第一行,因為第一行是無效的