hotoolong's blog

プログラムのことやエンジニアリングに関することを記事にしています。

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

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