mysqldumpでwhere句を使う方法

データベース データベース

MySQL のデータをバックアップする際に mysqldump を使用することが多いですが、大規模なデータベースでは特定のデータのみをエクスポートしたいケースがあります。mysqldump では --where オプションを使うことで、条件を指定してデータをダンプすることが可能です。本記事では、mysqldump--where オプションの詳細な使い方と、他のオプションとの組み合わせについて解説します。

基本的な 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

コメント

タイトルとURLをコピーしました