概要
このドキュメントでは、MySQLデータベースからデータをエクスポートし、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
で終わる必要があります)
たとえば、mydb
という名前のデータベースからローカルMySQLサーバーから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からデータをエクスポートし、再度取り込んでデータ構造を再作成し、データベースをpopulateすることは、データを移行したり、バックアップと復旧を行ったり、レプリケーションの準備をしたりするのに適した方法です。mysqldump
ツールとmysql
ツールが連携してこのタスクを達成する方法を理解することは、データベースの境界を越えてデータを転送するのに役立ちます。