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