Mysql-database-export

提供:Dev Guides
移動先:案内検索

MySQL-データベースのエクスポート

テーブルデータをテキストファイルにエクスポートする最も簡単な方法は、クエリ結果をサーバーホスト上のファイルに直接エクスポートする SELECT …​ INTO OUTFILE ステートメントを使用することです。

SELECTを使用したデータのエクスポート…​ INTO OUTFILEステートメント

このステートメントの構文は、通常の SELECT コマンドと INTO OUTFILE filename を最後に組み合わせます。 デフォルトの出力形式は、LOAD DATAコマンドの場合と同じです。 そのため、次のステートメントは tutorials_tbl テーブルを /tmp/tutorials.txt にタブ区切りの改行で終了したファイルとしてエクスポートします。

mysql> SELECT *FROM tutorials_tbl
   -> INTO OUTFILE '/tmp/tutorials.txt';

さまざまなオプションを使用して出力形式を変更し、列とレコードを引用および区切る方法を指定できます。 CRLFで終了する行を含むCSV形式でtutorial_tblテーブルをエクスポートするには、次のコードを使用します。

mysql> SELECT* FROM passwd INTO OUTFILE '/tmp/tutorials.txt'
   -> FIELDS TERMINATED BY ',' ENCLOSED BY '"'
   -> LINES TERMINATED BY '\r\n';
*SELECT ... INTO OUTFILE* には次のプロパティがあります-
 *出力ファイルはMySQLサーバーによって直接作成されるため、ファイル名はファイルをサーバーホスト上で書き込む場所を示す必要があります。* LOAD *の *LOCAL* バージョンに類似したステートメントのLOCALバージョンはありません。
* * SELECT ...を実行するには、 *MySQL FILE* 権限が必要です。 INTO *ステートメント。
* 出力ファイルが既に存在していてはなりません。 これにより、MySQLが重要なファイルを破壊するのを防ぎます。
* サーバーホストにログインアカウントを持っているか、そのホストからファイルを取得する何らかの方法が必要です。 それ以外の場合、 *SELECT ... INTO OUTFILE* コマンドは、ほとんどの場合価値がありません。
* UNIXでは、ファイルは*世界で読み取り可能*に作成され、MySQLサーバーが所有します。 つまり、ファイルを読み取ることはできますが、削除できない場合があります。

生データとしてのテーブルのエクスポート

*mysqldump* プログラムは、テーブルとデータベースのコピーまたはバックアップに使用されます。 テーブル出力を *Raw Datafile* として、またはテーブル内のレコードを再作成する *INSERT* ステートメントのセットとして書き込むことができます。

テーブルをデータファイルとしてダンプするには、MySQLサーバーがファイルを書き込むディレクトリを示す*-tab *オプションを指定する必要があります。

たとえば、 tutorials_tbl テーブルを TUTORIALS データベースから /tmp ディレクトリのファイルにダンプするには、以下に示すコマンドを使用します。

$ mysqldump -u root -p --no-create-info \
   --tab=/tmp tutorials tutorials_tbl
password ******

テーブルの内容または定義をSQL形式でエクスポートする

テーブルをSQL形式でファイルにエクスポートするには、以下に示すコマンドを使用します。

$ mysqldump -u root -p TUTORIALS tutorials_tbl > dump.txt
password ******

これにより、次のようなコンテンツを持つファイルが作成されます。

-- MySQL dump 8.23
--
-- Host: localhost    Database: TUTORIALS
---------------------------------------------------------
-- Server version       3.23.58

--
-- Table structure for table `tutorials_tbl`
--

CREATE TABLE tutorials_tbl (
   tutorial_id int(11) NOT NULL auto_increment,
   tutorial_title varchar(100) NOT NULL default '',
   tutorial_author varchar(40) NOT NULL default '',
   submission_date date default NULL,
   PRIMARY KEY  (tutorial_id),
   UNIQUE KEY AUTHOR_INDEX (tutorial_author)
) TYPE = MyISAM;

--
-- Dumping data for table `tutorials_tbl`
--

INSERT INTO tutorials_tbl
   VALUES (1,'Learn PHP','John Poul','2007-05-24');
INSERT INTO tutorials_tbl
   VALUES (2,'Learn MySQL','Abdul S','2007-05-24');
INSERT INTO tutorials_tbl
   VALUES (3,'JAVA Tutorial','Sanjay','2007-05-06');

複数のテーブルをダンプするには、それらすべてにデータベース名引数を続けて名前を付けます。 データベース全体をダンプするには、次のコードブロックに示すように、データベースにちなんでテーブルに名前を付けないでください。

$ mysqldump -u root -p TUTORIALS > database_dump.txt
password ******

ホストで使用可能なすべてのデータベースをバックアップするには、次のコードを使用します。

$ mysqldump -u root -p --all-databases > database_dump.txt
password ******

--all-databasesオプションは、MySQL 3.23.12バージョンで使用できます。 この方法は、データベースのバックアップ戦略を実装するために使用できます。

テーブルまたはデータベースを別のホストにコピーする

あるMySQLサーバーから別のMySQLサーバーにテーブルまたはデータベースをコピーする場合は、データベース名とテーブル名で mysqldump を使用します。

ソースホストで次のコマンドを実行します。 これにより、データベース全体が dump.txt ファイルにダンプされます。

$ mysqldump -u root -p database_name table_name > dump.txt
password *****

上記で説明したように、特定のテーブル名を使用せずにデータベース全体をコピーできます。

次に、別のホストでdump.txtファイルをftpし、次のコマンドを使用します。 このコマンドを実行する前に、宛先サーバーにdatabase_nameを作成したことを確認してください。

$ mysql -u root -p database_name < dump.txt
password *****

中間ファイルを使用せずにこれを達成する別の方法は、mysqldumpの出力をネットワーク経由でリモートMySQLサーバーに直接送信することです。 ソースデータベースが存在するホストから両方のサーバーに接続できる場合は、次のコマンドを使用します(両方のサーバーにアクセスできることを確認してください)。

$ mysqldump -u root -p database_name \
   | mysql -h other-host.com database_name

mysqldumpでは、コマンドの半分がローカルサーバーに接続し、ダンプ出力をパイプに書き込みます。 コマンドの残りの半分は、other-host.com上のリモートMySQLサーバーに接続します。 入力用のパイプを読み取り、各ステートメントをother-host.comサーバーに送信します。