hotoolong's blog

RailsやVim、業務で気になったことを綴ってます

mysqldumpでテーブルを対象、対象外にする

mysqldumpを定期的にするのですが、 対象外にしたいテーブルが複数でてきたときの対応方法をメモしておきます。

ダンプファイルと取るときには直接テーブル名を選択すればいいケースもあります。 以下のコマンドですと一番上を選択してデータベースを指定して登録したいテーブル名を後ろに列挙するといいですね。

shell> mysqldump [options] db_name [tbl_name ...]
shell> mysqldump [options] --databases db_name ...
shell> mysqldump [options] --all-databases

MySQL :: MySQL 5.6 リファレンスマニュアル :: 4.5.4 mysqldump — データベースバックアッププログラム

オプションはいろいろあるので見てもらうとして、対象外にしたい場合は--ignore-tableをつければ良さそうです。

ただ複数テーブル対象外にしたい場合は少し厄介で、--ignore-table=db_name.table_name をたくさん作らないといけなくなります。

shellで書くとすると以下みたいにつくります。

  db_host=hogehoge_host
  db_name=hogehoge_db
  db_user=hogehoge_user

  ignore_tables=("tests" "users" "accounts")
  ignore_option_str=""
  for tab in $ignore_tables[@]; do
    ignore_option_str=$ignore_option_str" --ignore-table=$db_name.$tab"
  done
  mysqldump --single-transaction $ignore_option_str -h $db_host -u $db_user -p $db_name

対象のテーブル名の方が少ない場合はテーブル名を列挙して取るのが早そうなので、ケースによって判断して取得するのがいいですかね。