シェア

概要

このドキュメントでは、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_NAMEOUTPUT_FILEのプレースホルダーを、それぞれの値に置き換える必要があります。

  • あなたの**データベース名**
  • 目的の**出力ファイル**の名前(最高の相互運用性のために.sqlで終わる必要があります)

たとえば、mydbという名前のデータベースからローカルMySQLサーバーからmydb.sqlという名前のファイルにデータをエクスポートするには、次のコマンドを使用できます。

mysqldump mydb > mydb.sql

データベースの認証情報の提供

MySQLデータベースサーバーの場所を指定するために、次の引数を追加できます。

引数デフォルト説明
--host (短縮形:-hlocalhostサーバーのホストマシンのアドレス
--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のみをダンプし、実際のデータを除外する
  • 特定のテーブルを除外する

これらのシナリオで使用できるいくつかのコマンドラインオプションの概要を以下に示します。

引数デフォルト説明
--no-create-db (短縮形:-nfalseDDLステートメントを除外し、データのみをエクスポートします。
--no-data (短縮形:-dfalseデータを除外し、DDLステートメントのみをエクスポートします。
--tablesデフォルトですべてのテーブルが含まれますダンプするテーブルの名前を明示的に指定します。
--ignore-table-ダンプから特定のテーブルを除外します。

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_NAMEINPUT_FILEのプレースホルダーを、それぞれの値に置き換える必要があります。

  • あなたの**データベース名**(その名前のデータベースを事前に作成する必要があります!)
  • ターゲット**入力ファイル**の名前(おそらく.sqlで終わります)

例:

mysql mydb < mydb.sql

認証するには、上記で説明した--userオプションと--passwordオプションを使用できます。

mysql --user root --password mydb < mydb.sql

事前にデータベースを作成するには、次のSQLステートメントを使用できます。

CREATE DATABASE mydb;

結論

MySQLからデータをエクスポートし、再度取り込んでデータ構造を再作成し、データベースをpopulateすることは、データを移行したり、バックアップと復旧を行ったり、レプリケーションの準備をしたりするのに適した方法です。mysqldumpツールとmysqlツールが連携してこのタスクを達成する方法を理解することは、データベースの境界を越えてデータを転送するのに役立ちます。

著者について
Justin Ellingwood

Justin Ellingwood

Justinは2013年からデータベース、Linux、インフラストラクチャ、および開発ツールについて執筆しています。現在は妻と2匹のウサギと共にベルリンに住んでいます。彼は通常、三人称で書く必要はありません。それは関係者全員にとって救いです。