【MySQL】mysqldump –whereで条件を指定してダンプする方法|サブクエリ・複数条件の実例付き

2026-04-06

mysqldump でデータベース全体ではなく、特定の条件に合致するデータだけをエクスポートしたいことがあります。

「特定の日付以降のレコードだけバックアップしたい」
「特定のユーザーIDに紐づくデータだけ抽出したい」
「本番データの一部だけ開発環境に持ち込みたい」

--where オプションを使えばこれらがすべて実現できます。
MySQL実務経験をもとに、基本的な使い方からサブクエリを使った応用パターンまで解説します。

基本的な mysqldump コマンドの使い方

通常、mysqldump を使ってデータベース全体をバックアップする場合、以下のようにコマンドを実行します。

mysqldump -u ユーザー名 -p データベース名 > backup.sql

この方法では、指定したデータベースのすべてのテーブルがダンプされます。しかし、特定のテーブルのデータのみをバックアップしたい場合は、次のようにテーブル名を指定できます。

mysqldump -u ユーザー名 -p データベース名 テーブル名 > backup.sql

--where オプションを使用して条件を指定する

--where オプションを使うことで、特定の条件に合致するデータのみをエクスポートできます。例えば、users テーブルから created_at2024-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 の仕様やオプションの詳細については、公式ドキュメントを参照してください。

https://dev.mysql.com/doc/refman/8.0/ja/mysqldump.html

まとめ

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

Database

Posted by 千原 耕司