MySQL でテーブルを一括削除する方法

テーブルの一括削除

MySQL においてテーブルをDROP TABLEで削除する際にはワイルドカードを用いることができません。何とかしたいですね。

grepしてパイプでつなげる

以下のようにコマンドラインから投げてやれば、db_nameに存在する複数のテーブルを削除できます。下記ではテーブル名がfugafuga_*にマッチするものを削除しています*1。もちろんユーザ名はroot、そのパスワードはhogehogeということになります。

ユーザ名やパスワード、db_nameを2回書かなければいけないのがイケてないですが、そこはまぁ頑張ってください。

$ mysql -u root -phogehoge -e 'SHOW TABLES FROM db_name' | grep fugafuga_* | xargs -I "@@" mysql -u root -phogehoge -e "DROP TABLE db_name.\`@@\`"

応用すればデータベースの一括削除も

簡単なコマンドなので応用すれば様々な一括処理ができますね。

*1:正規表現を使ったりすると思わぬ結果になることもあるので注意です

Ubuntu 16.04 LTS で MySQL のスロークエリログを出力する方法

スロークエリログ

一定の条件を設定し、それを満たす(満たしてしまう)クエリに対してログを吐き出す設定です。パフォーマンス改善などに役立ちます。

設定ファイル

以下のファイルに追記します。

/etc/mysql/mysql.conf.d/mysqld.cnf

設定内容(設定項目)

以下の項目を設定しておけばいいでしょう。他にも項目がありますが、公式リファレンスを参照してみてください。

  • slow_query_log
    • スロークエリログの有効無効を設定する
    • 0 or 1 または OFF or ON で設定する
  • slow_query_log_file
    • 出力するログファイルの場所を設定する
    • /var/log/mysql/slow_query.log など
  • long_query_time
    • ここで指定した数値(単位は秒)以上の時間がかかったクエリを記録する
  • log_queries_not_using_indexes
    • インデックスを使用しなかったクエリを記録するかどうかを設定する
    • 0 or 1 または OFF or ON で設定する

設定例

例えば以下のように追記します。追記した後は再起動を忘れないようにしましょう。

slow_query_log = ON
slow_query_log_file = /var/log/mysql/slow_query.log
long_query_time = 3
log_queries_not_using_indexes = ON

Fluentd の tail Input Plugin で CSV ファイルを読み込む際は read_from_head を true にする

Fluentd で CSV ファイルを読み込む

Fluentd を用いて CSV ファイルを読み込む際は、tail Input Plugin を用いるのが定石だと思います。formatcsvが指定できますし。

待てど暮らせど出力してくれない

しかしながら、以下のような感じで conf ファイルを書いても一向に出力してくれません。

<source>
  @type tail
  format csv
  path /path/to/sample.csv
  tag hogehoge
  pos_file /path/to/sample.csv.pos
  keys column_1,column_2,column_3
</source>

<match **>
  @type file
  path /path/to/sample.csv.log
</match>

read_from_head オプション

上記の書き方ですと CSV ファイルの読み込みを初めてする場合は入力がありません。ですので、read_from_headディレクティブを付けてその値をtrueと指定しましょう。

<source>
  @type tail
  format csv
  path /path/to/sample.csv
  tag hogehoge
  pos_file /path/to/sample.csv.pos
  keys column_1,column_2,column_3
  read_from_head true
</source>

<match **>
  @type file
  path /path/to/sample.csv.log
</match>

これでちゃんと CSV ファイルを読み込んでくれたはずです。ただ、このオプションを常時trueにしていると毎回先頭から読み込んでしまう(?)かもしれないので要検討です*1

*1:posファイルがあるから大丈夫?

Powered by はてなブログ