MySQL のデータをバックアップする際に mysqldump
を使用することが多いですが、大規模なデータベースでは特定のデータのみをエクスポートしたいケースがあります。mysqldump
では --where
オプションを使うことで、条件を指定してデータをダンプすることが可能です。本記事では、mysqldump
の --where
オプションの詳細な使い方と、他のオプションとの組み合わせについて解説します。
基本的な mysqldump コマンドの使い方
通常、mysqldump
を使ってデータベース全体をバックアップする場合、以下のようにコマンドを実行します。
mysqldump -u ユーザー名 -p データベース名 > backup.sql
この方法では、指定したデータベースのすべてのテーブルがダンプされます。しかし、特定のテーブルのデータのみをバックアップしたい場合は、次のようにテーブル名を指定できます。
mysqldump -u ユーザー名 -p データベース名 テーブル名 > backup.sql
--where オプションを使用して条件を指定する
--where
オプションを使うことで、特定の条件に合致するデータのみをエクスポートできます。例えば、users
テーブルから created_at
が 2024-01-01
以降のデータのみをエクスポートする場合、以下のように記述します。
mysqldump -u ユーザー名 -p データベース名 users --where="created_at >= '2024-01-01'" > users_backup.sql
また、複数の条件を指定する場合は、SQL の AND
を使います。
mysqldump -u ユーザー名 -p データベース名 orders --where="status='completed' AND order_date >= '2024-01-01'" > completed_orders.sql
LIKE検索も使うことが可能です。
mysqldump -u ユーザー名 -p データベース名 users --where='name LIKE "Foo%"' > foo_users.sql
サブクエリも使うことが可能です。
mysqldump -u ユーザー名 -p データベース名 users --where="id IN (SELECT user_id FROM orders WHERE order_date = '2024-01-01')" > order_users_20240101.sql
--where オプションと組み合わせる便利なオプション
mysqldump
の --where
オプションと組み合わせると便利なオプションを紹介します。
--single-transaction
--single-transaction
を指定すると、ダンプ中にテーブルのロックを回避しながら整合性の取れたデータを取得できます。
mysqldump -u ユーザー名 -p --single-transaction データベース名 テーブル名 --where="条件" > backup.sql
--no-create-info
--no-create-info
を指定すると、テーブルの CREATE 文を含めず、データのみをエクスポートできます。
mysqldump -u ユーザー名 -p データベース名 テーブル名 --where="条件" --no-create-info > data_only_backup.sql
--lock-tables
デフォルトでは mysqldump
は --lock-tables
を有効にし、テーブルのロックを取得してバックアップを実行します。大量のデータをダンプする場合に影響があるため、必要に応じて --single-transaction
を併用するのが望ましいです。
mysqldump -u ユーザー名 -p --single-transaction データベース名 テーブル名 --where="条件" --lock-tables=0 > backup.sql
最新の MySQL バージョンでの動作確認
MySQL のバージョンによっては mysqldump の仕様が変更されることがあります。最新の mysqldump の仕様やオプションの詳細については、公式ドキュメントを参照してください。
まとめ
mysqldump
の --where
オプションを活用することで、大規模なデータベースの一部のみを効率的にバックアップできます。
--where
を使って特定のデータのみをエクスポートできる。--single-transaction
を併用すると、ダンプ中のロックを回避できる。--no-create-info
でデータのみのエクスポートが可能。- MySQL の最新バージョンに合わせた仕様を確認することが重要。
特定の条件を指定してデータを抽出する場合は、適切なオプションを組み合わせて活用しましょう。
mysqldump -u root -p --where="id=1" mydb users
ダブルクォートを利用するパターン
mysqldump -u root -p --where='name="Foo"' mydb users
コメント