HOWTO · MySQL
Mysqldump を使用して MySQL データベースをエクスポートする
mysqldump コマンドラインユーティリティを使用して MySQL データベースをエクスポートする方法について学習します。また、特定のデータベースからテーブルをエクスポートする方法についても学習します。
このページの内容
mysqldump を使うと、MySQL データベースを SQL ファイルにエクスポートできます。テーブル名を追加すると対象を絞り、より広い範囲を対象にするには --databases または --all-databases を使います。行を含めずに構造だけをエクスポートするには --no-data を使います。各例ではコマンドの引数とパスワード入力を説明しますが、ダンプを復元できるかどうかは確認しません。
MySQL データベースを mysqldump でエクスポートする
mysqldump は、MySQL データベースを SQL 文としてエクスポートするコマンドラインユーティリティです。ダンプには、テーブル定義とデータ、選択したテーブル、名前を指定した複数のデータベース、すべてのデータベース、またはデータベースの構造のみを含められます。以下のコマンドはダンプをファイルに書き込みますが、作成したバックアップを復元できるかどうかは確認しません。
mysqldump の構文とオプションを理解する
一般的なコマンドの形式は次のとおりです。mysqldump -u USER -p [OPTIONS] DATABASE [TABLE ...] > FILE.sql。大文字のプレースホルダーは、ユーザーアカウント、データベース名、必要に応じてテーブル名、保存先のパスに置き換えます。データベース名はテーブル名より前に指定します。シェルの > 演算子は標準出力を保存先ファイルにリダイレクトし、ファイルがすでに存在する場合は上書きします。既存のバックアップを残す必要がある場合は、新しいパスを選ぶか、先に既存ファイルを移動してください。
-u オプションには MySQL のユーザー名を指定します。-p だけを指定すると、ユーティリティがパスワードの入力を求めます。パスワードを -p の後ろに記述すると、シェル履歴やプロセス情報に表示されるおそれがあるため避けてください。--no-data オプションはテーブルの行を除外し、--databases は名前を指定したデータベースを選び、--all-databases はすべてのデータベースを選びます。追加のオプションやインストール済みバージョンに関する詳細は、MySQL の mysqldump リファレンスを参照してください。
この書き換えでは、自己完結したシェルの例を実行していません。シェルのリダイレクトの動作上、この例はサンプル文字列を一時ファイルに書き込み、そのファイルの内容を表示します。MySQL に接続したり、mysqldump を実行したりはしません。変更されていない例の出力に含まれるラベルは英語のままです。
work_dir="$(mktemp -d)"
trap 'rm -rf "$work_dir"' EXIT
printf '%s\n' 'CREATE TABLE customer (id INT);' > "$work_dir/person.sql"
cat "$work_dir/person.sql"
データベースをエクスポートする
1つのデータベースをエクスポートするには、mysqldump -u root -p person > person_backup.sql を実行します。パスワードの入力を求められたら、root のパスワードを入力してください。ファイル名はコマンドの実行時ディレクトリからの相対パスです。保存先を指定するには、/backups/person_backup.sql のような絶対パスを使います。アカウントにデータベースを読み取る権限があり、保存先ディレクトリに書き込み権限があることを確認してください。
選択したテーブルをエクスポートする
最初にデータベース名を指定し、その後に含めるテーブル名を並べます。1つのテーブルをエクスポートする場合は、mysqldump -u root -p person customer > customer_table.sql を使います。2つのテーブルをエクスポートする場合は、mysqldump -u root -p person customer employee > customer_employee.sql を使います。これらのコマンドでは、選択したテーブルの定義とデータが既定でエクスポートされます。動作を変える必要がある場合は、使用中の MySQL バージョンで案内されているオプションを追加してください。
複数またはすべてのデータベースをエクスポートする
名前を指定した1つ以上のデータベースをエクスポートするには、データベース名の前に --databases を指定します。例: mysqldump -u root -p --databases person courses > person_courses.sql。このオプションはダンプにデータベース作成文を含めるため、指定したデータベースのインポートに役立ちます。
アカウントから利用できるすべてのデータベースをエクスポートするには、正しい綴りの --all-databases オプションを使います。例: mysqldump -u root -p --all-databases > all_databases.sql。ダンプに含められるデータベースやオブジェクトは、アカウントの権限によって決まります。すべてのデータベースを含むダンプには機密データが含まれる可能性があるため、安全な場所に保存してください。
データを含めずにデータベース構造をエクスポートする
テーブル定義だけをエクスポートして行を含めない場合は、--no-data を使います。例: mysqldump -u root -p --no-data person > person_structure.sql。開発やドキュメント作成用にスキーマのコピーが必要な場合に便利です。このコマンドは引き続き MySQL サーバーに接続し、適切なアクセス権を必要とします。サーバーを使わずに既存ファイルを変換する方法ではありません。
まとめ
対象範囲に応じてコマンドを選びます。データベース名を指定するとそのデータベース全体をエクスポートでき、後ろにテーブル名を追加すると対象テーブルを選べます。名前を指定した複数のデータベースには --databases、サーバー上のすべてのデータベースには --all-databases、行を含めない構造のエクスポートには --no-data を使います。パスワードは入力プロンプトで指定し、ダンプを安全に保管できる保存先を選んでください。コマンドが成功するとダンプファイルが作成されますが、バックアップとして頼る前に、復元を別途テストしてください。