概要
このドキュメントでは、MySQLデータベースからデータをエクスポートし、データをインポートする方法について説明します。このトピックについては、公式のMySQLドキュメントで詳しく学ぶことができます。
`mysqldump`によるデータのエクスポート
`mysqldump`は、MySQLデータベースからデータをエクスポートするために使用できるネイティブのMySQLコマンドラインユーティリティです。このコマンドのすべてのオプションを表示するには、実行します
mysqldump --help
あなたのMySQLインストールには、デフォルトで`mysqldump`が含まれており、macOSでは`/usr/local/mysql/bin`に含まれている場合があります。コマンドが自動的に認識されない場合は、そのディレクトリ`/usr/local/mysql/bin/mysqldump`を指定してコマンドを呼び出すか、`PATH`に追加することで、ディレクトリを指定せずに`mysqldump`を実行できます。
MySQLドキュメントより
`mysqldump`クライアントユーティリティは論理バックアップを実行し、元のデータベースオブジェクト定義とテーブルデータを再現するために実行できる一連のSQLステートメントを生成します。これは、バックアップまたは別のSQLサーバーへの転送のために、1つ以上のMySQLデータベースをダンプします。`mysqldump`コマンドは、CSV、その他の区切りテキスト、またはXML形式で出力することもできます。
基本的なコマンドは次のようになります
mysqldump DB_NAME > OUTPUT_FILE
プレースホルダーの`DB_NAME`と`OUTPUT_FILE`を、それぞれの値に置き換える必要があります。
- あなたのデータベース名
- 目的の出力ファイル名(最適な相互運用性のために`.sql`で終わるべきです)
例えば、ローカルMySQLサーバーから`mydb`というデータベースのデータを`mydb.sql`というファイルにエクスポートするには、以下のコマンドを使用できます。
mysqldump mydb > mydb.sql
データベース認証情報の提供
MySQLデータベースサーバーの場所を指定するために、以下の引数を追加できます。
引数 | デフォルト | 説明 |
---|---|---|
`--host` (短縮形: `-h`) | localhost | サーバーのホストマシンのアドレス |
`--port` (短縮形: `-p`) | - | MySQLサーバーがリッスンしているサーバーのホストマシンのポート |
MySQLデータベースサーバーに対して認証を行うには、以下の引数を使用できます。
引数 | デフォルト | 説明 |
---|---|---|
`--user` (短縮形: `-u`) | - | データベースユーザー名。 |
`--password` (短縮形: `-p`) | - | パスワードの入力を促す。 |
例えば、以下の接続文字列を持つMySQLデータベースからデータをエクスポートする場合、
mysql://opnmyfngbknppm:XXX@ec2-46-137-91-216.eu-west-1.compute.amazonaws.com:5432/d50rgmkqi2ipus
以下の`mysqldump`コマンドを使用できます。
mysqldump --host ec2-46-137-91-216.eu-west-1.compute.amazonaws.com --port --user opnmyfngbknppm --password d50rgmkqi2ipus > backup.sql
注意点として、このコマンドは、指定されたユーザーのパスワードを入力する必要があるプロンプトをトリガーします。
出力の制御
データベース全体をダンプしたくない場合があるかもしれません。例えば、次のようにしたい場合です。
- 実際のデータのみをダンプし、DDL(つまり、`CREATE TABLE`などのデータベーススキーマを定義するSQLステートメント)を除外する
- DDLのみをダンプし、実際のデータを除外する
- 特定のテーブルを除外する
これらのシナリオで使用できるコマンドラインオプションのいくつかについて、以下に概要を示します。
SQLファイルからのデータのインポート
`mysqldump`を使用してMySQLデータベースをSQLファイルとしてエクスポートした後、そのSQLファイルを`mysql`に読み込ませることで、データベースの状態を復元できます。
mysql DB_NAME < INPUT_FILE
あなたのMySQLインストールには、デフォルトで`mysql`が含まれており、macOSでは`/usr/local/mysql/bin`に含まれている場合があります。コマンドが自動的に認識されない場合は、そのディレクトリ`/usr/local/mysql/bin/mysql`を指定してコマンドを呼び出すか、`PATH`に追加することで、ディレクトリを指定せずに`mysql`を実行できます。
プレースホルダーの`DB_NAME`と`INPUT_FILE`を、それぞれの値に置き換える必要があります。
- あなたのデータベース名(その名前のデータベースは事前に作成されている必要があります!)
- 目的の入力ファイル名(通常は`.sql`で終わります)
例:
mysql mydb < mydb.sql
認証するには、上記で説明した`--user`および`--password`オプションを使用できます。
mysql --user root --password mydb < mydb.sql
事前にデータベースを作成するには、以下のSQLステートメントを使用できます。
CREATE DATABASE mydb;
結論
MySQLからデータをエクスポートし、それを再度取り込んでデータ構造を再構築し、データベースにデータを投入することは、データ移行、バックアップとリカバリ、またはレプリケーションの準備に良い方法です。`mysqldump`と`mysql`ツールがこのタスクを達成するためにどのように連携するかを理解することは、データベースの境界を越えてデータを転送するのに役立ちます。