[MySQL] データベース名をワイルドカードで指定して一括削除する

ちょっとしたJenkinsの設定ミスで、似たような名前のデータベースを大量に作ってしまった @kadoppe です。こんばんは。この記事では、そんな似たような名前のデータベースを一括削除する方法を紹介します。

「似たような名前のデータベース」というのは、こんなやつです。

  • hoge_2013101501
  • hoge_2013101502
  • hoge_2013101503
  • hoge_2013101504

全部必要のないデータベースなので削除したいのですが、一つ一つ削除するのは手間。

データベースを削除するSQL文として「DROP TABLE」文がありますが、複数のデータベースをワイルドカードで指定するようなことはできません。

諦めずにいろいろ調べていると、Stack Overflowで以下のような投稿を発見しました。

sql – Drop MySQL databases matching some wildcard? – Stack Overflow

どうやら、シェルで複数のコマンドをつなげて実行することで、ワイルドカードによるデータベースの一括削除が実現できる模様。

上記の「hoge_」で始まるデータベースを一括で削除するには、シェルで以下のコマンドを実行すればいいです。

「ユーザ名」と「パスワード」はデータベースを削除出来る権限を持つMySQLユーザの情報に置き換えてください。

この長い3つのコマンドをパイプでつなげています。

  1. データベース一覧を出力し、
  2. 名前が「hoge_」で始まるデータベースだけを次のコマンドに渡して、
  3. 条件に一致したデータベースに対してDROP database文を実行

しているわけです。

あんまり頻繁にお世話になるコマンドではないですが、忘れないようにメモということで。
それではー!