MySQLでダンプするときに全てのレコードをdumpすると重いので、特定のテーブルの特定のレコードのみdumpしたいなーと思って調べたときのメモ。
基本のmysqldumpコマンド
$ mysqldump [options] db_name [tbl_name ...]
データベース全体をダンプするには、db_name に続けてテーブルを指名しないか、または --databases オプションまたは --all-databases オプションを使用します。
MySQL :: MySQL 5.6 リファレンスマニュアル :: 4.5.4 mysqldump — データベースバックアッププログラム
[options]に入るのはサーバー接続時のオプションなので
$ mysqldump -u USERNAME -p PASSWORD -h HOST sample_database > ~/hako_sample.sql
sample_database
の全レコードをダンプする場合はこうなる。
--whereオプション
特定のレコードのみdumpする場合は--where
もしくは-w
オプションを使う。
指定された WHERE 条件で選択される行のみダンプします。
--where="user='jimf'" -w"userid>1" -w"userid<1"
MySQL :: MySQL 5.6 リファレンスマニュアル :: 4.5.4 mysqldump — データベースバックアッププログラム
当然テーブルは指定する必要があるので、
$ mysqldump -u USERNAME -p PASSWORD -h HOST sample_database users --where="id<=100" > ~/hako_sample.sql
sample_database
のusers
テーブルから、idが100以下のレコードのみダンプする場合、上記のようになる。
--ignore-tableオプション
ついでによく使えそうな--ignore-table
オプションも使ってみた。
--ignore-table=db_name.tbl_name
指定されたテーブルをダンプしません。これはデータベース名とテーブル名を両方指定する必要があります。複数のテーブルを無視するには、このオプションを複数回使用してください。
なるほど。
$ mysqldump -u USERNAME -p PASSWORD -h HOST sample_database --ignore-table=sample_database.users > ~/hako_sample.sql
sample_database
のusers
テーブル以外の全テーブルを取得。
データベース名を再びセットするのが若干冗長な気もするけど、複数のデータベースを指定する場合もあるから仕方ないか。
複数のテーブルを無視する場合は
$ mysqldump -u USERNAME -p PASSWORD -h HOST sample_database --ignore-table=sample_database.users --ignore-table=sample_database.articles > ~/hako_sample.sql
--ignore-table
オプションを2度使用。う〜ん長い。。
参考
MySQL :: MySQL 5.6 リファレンスマニュアル :: 4.5.4 mysqldump — データベースバックアッププログラム