About Reference:アバウトリファレンス

当サイトはPHPなどのサーバーサイドスクリプトや、
MySQLなどのデータベースプログラミングのマニュアルサイトです。
WEBアプリケーションの開発やこれからWEBプログラミングを覚えたい!
というような方々のお手伝いが出来れば幸いです。

日本語 MySQL マニュアル

4.9.7. mysqldump(テーブル構造とデータのダンプ)

バックアップ用のデータベースまたはデータベースの集合をダンプしたり、他の SQL サーバ(MySQL サーバである必要はない)にデータを移動するためのユーティリティです。ダンプには、テーブル作成や入力のための SQL ステートメントが含まれます。

同じサーバ上でバックアップを行う場合には、mysqlhotcopy の方の使用を考慮してください。 See 項4.9.8. 「mysqlhotcopy(MySQL のデータベースとテーブルのコピー)」

    mysqldump [OPTIONS] database [tables]
か  mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
か  mysqldump [OPTIONS] --all-databases [OPTIONS]

テーブルを指定しなかったり、--databases オプションまたは --all-databases オプションを使用すると、データベース全体がダンプされます。

使用しているバージョンの mysqldump がサポートするオプションの一覧を照会するには、mysqldump --help を実行します。

注意: mysqldump--quick または --opt なしで実行すると、mysqldump は結果をダンプする前に、結果セット全体をメモリにロードします。これは、大きなデータベースをダンプする際、問題になる可能性があります。

注意: mysqldump プログラムの新しいコピーを使用している場合で、非常に古い MySQL サーバに読み込むダンプを行うときには、--opt オプションまたは -e オプションは使用しないでください。

mysqldump は、以下のオプションをサポートします。

  • --add-locks

    各テーブルダンプの前に LOCK TABLES を追加し、後に UNLOCK TABLE を追加する(MySQL への挿入を速くするため)。

  • --add-drop-table

    各作成ステートメントの前に drop table を追加する。

  • -A, --all-databases

    すべてのデータベースをダンプする。これは、すべてのデータベースを選択した状態で --databases を実行するのと同じである。

  • -a, --all

    MySQL 固有の作成オプションをすべて含める。

  • --allow-keywords

    キーワードであるカラム名の作成を認める。各カラム名の先頭にテーブル名を付け加えることが必要。

  • -c, --complete-insert

    完全な挿入ステートメント(カラム名も指定)を使用する。

  • -C, --compress

    クライアントとサーバの両方が圧縮をサポートする場合、クライアントとサーバ間の情報をすべて圧縮する。

  • -B, --databases

    いくつかのデータベースをダンプする。注意:ここでは、テーブル名を指定しない。名前の引数はすべて、データベース名として扱われる。 出力される各新規データベースの前に USE db_name; が追加される。

  • --delayed

    INSERT DELAYED コマンドでレコードを挿入する。

  • -e, --extended-insert

    新しい複数行 INSERT 構文を使用する(さらにコンパクトで速い挿入ステートメントを提供)。

  • -#, --debug[=option_string]

    プログラムのトレース使用(デバック目的)。

  • --help

    ヘルプメッセージを表示して終了する。

  • --fields-terminated-by=... , --fields-enclosed-by=... , --fields-optionally-enclosed-by=... , --fields-escaped-by=... , --lines-terminated-by=...

    これらのオプションは -T オプションとともに使用する。LOAD DATA INFILE の対応する節と同じ意味を持つ。 See 項6.4.8. 「LOAD DATA INFILE 構文」

  • -F, --flush-logs

    ダンプを開始する前に、MySQL サーバ内のログファイルをフラッシュする。注意: このオプションを --all-databases(または -A)オプションと組み合わせて使用した場合、ログは各データベースのダンプごとにフラッシュされる。

  • -f, --force,

    テーブルダンプ中にSQL エラーが発生しても続行する。

  • -h, --host=..

    指定したホストの MySQL サーバからデータをダンプする。デフォルトのホストは localhost

  • -l, --lock-tables.

    ダンプを開始する前にすべてのテーブルをロックする。テーブルは READ LOCAL でロックされ、MyISAM テーブルの場合は同時挿入が可能になる。

    注意: 複数のデータベースをダンプする場合、--lock-tables は各データベースを個別にロックする。したがって、このオプションを使用した場合、データベース間でのテーブルの論理整合性は保証されない。 異なるデータベースのテーブルは、完全に異なる状態でダンプされる可能性がある。

  • -K, --disable-keys

    /*!40000 ALTER TABLE tb_name DISABLE KEYS */; および /*!40000 ALTER TABLE tb_name ENABLE KEYS */; が出力に含まれる。これにより、インデックスが、すべてのデータが挿入それた後に作成されるため、MySQL 4.0 サーバへのデータのロードが速くなる。

  • -n, --no-create-db

    CREATE DATABASE /*!32312 IF NOT EXISTS*/ db_name; が出力に含まれない。--databases オプションまたは --all-databases オプションを指定した場合は、上記の行が追加される。

  • -t, --no-create-info

    テーブル作成情報(CREATE TABLE ステートメント)を書き込まない。

  • -d, --no-data

    テーブルのレコード情報を一切書き込まない。テーブルの構造だけをダンプする場合、非常に便利である。

  • --opt

    --quick --add-drop-table --add-locks --extended-insert --lock-tables と同じ。MySQL サーバに読み込むための最速ダンプを提供する。

  • -pyour_pass, --password[=your_pass]

    サーバ接続時に使用するパスワード。'=your_pass' 部分を指定しなければ、mysqldump によってパスワードのプロンプトが表示される。

  • -P, --port=...

    TCP/IP 接続に使用するポート番号。

  • --protocol=(TCP | SOCKET | PIPE | MEMORY)

    使用する接続プロトコルを指定する。MySQL 4.1 で導入。

  • -q, --quick

    クエリをバッファせず、stdou に直接ダンプする。これを行うには、mysql_use_result() を使用する。大きなダンプの際に特に便利である。

  • -Q, --quote-names

    テーブル名およびカラム名を '`' 文字で囲む。

  • -r, --result-file=...

    指定したファイルへの直接出力。このオプションは MSDOS で使用する。改行 '\n' が '\n\r'(改行 + 復帰)に変換されるのを防ぐためである。

  • --single-transaction

    このオプションは、サーバからデータをダンプする前に、BEGIN SQL コマンドを発行する。これは、InnoDB テーブルと READ_COMMITTED トランザクション分離レベルで特に役立つ。このモードでは、どのアプリケーションもブロックすることなく、BEGIN が発行されたときのデータベースの整合した状態をダンプできる。

    このオプションを使用する際は、トランザクションテーブルだけが整合状態でダンプされることに注意する。たとえば、このオプションでダンプされた MyISAM テーブルまたは HEAP テーブルは、変更されている可能性がある。

    --single-transaction オプションはバージョン 4.0.2 で追加された。 このオプションは --lock-tables オプションとは相互排他的である。LOCK TABLES は、前のトランザクションをすでにコミットしているためである。

  • -S /path/to/socket, --socket=/path/to/socket

    localhost(デフォルトホスト)との接続に使用するソケットファイル。

  • --tables

    --databases(-B)オプションを上書きする。

  • -T, --tab=path-to-some-directory

    各テーブルに対する SQL CREATE コマンドが含まれる table_name.sql ファイル、および各テーブルに対するデータが含まれる table_name.txt ファイルを作成する。.txt ファイルの形式は、--fields-xxx オプションおよび --lines--xxx オプションに基づく。注意: このオプションは、mysqldumpmysqld デーモンと同じマシンで実行している場合のみ有効。FILE 権限のある MySQL アカウントを使用することが必要。また、mysqld を実行しているログインユーザまたはグループ(通常はユーザ mysql、グループ mysql)に、指定した場所でのファイルの作成および書き込み権限が必要。

  • -u user_name, --user=user_name

    サーバとの接続に使用する MySQL ユーザ名。デフォルト値はユーザの Unix ログイン名。

  • -O name=value, --set-variable=name=value

    変数の値を指定する。指定可能な変数は以下に示す。注意: --set-variable=name=value および -O name=value 構文は、MySQL 4.0 で廃止。代わりに --name=value を使用すること。

  • -v, --verbose

    冗長モード。プログラムの実行内容に関する詳細情報を出力する。

  • -V, --version

    バージョン情報を出力して終了する。

  • -w, --where='where-condition'

    選択したレコードだけをダンプする。注意: 必ず引用符で囲むこと。

    "--where=user='jimf'" "-wuserid>1" "-wuserid<1"
    

  • -X, --xml

    1 つのデータベースを整形式の XML としてダンプ。

  • -x, --first-slave

    すべてのデータベースのすべてのテーブルをロック。

  • --master-data

    --first-slave とほぼ同じだが、CHANGE MASTER TO コマンドを出力する。マスタのこの SQL ダンプを使用してスレーブをセットアップしていた場合、このコマンドにより、後でマスタのバイナリログ内の正しい位置からスレーブを開始させることができる。

  • -O net_buffer_length=#, ここで # < 16M

    複数レコード挿入ステートメントを作成したときに(--extended-insert オプションまたは --opt オプションと同様)、mysqldumpnet_buffer_length までの長さのレコードを作成する。この変数を大きくする場合には、MySQL サーバの max_allowed_packet 変数が net_buffer_length よりも大きいことを確認する。

一般的に、mysqldump はデータベース全体のバックアップに使用されます。 See 項4.5.1. 「データベースのバックアップ」

shell> mysqldump --opt database > backup-file.sql

これを、以下のコマンドで MySQL に戻すことができます。

shell> mysql database < backup-file.sql

または

shell> mysql -e "source /path-to-backup/backup-file.sql" database

データベースの情報を別の MySQL サーバに移動することもできます。

shell> mysqldump --opt database | mysql ---host=remote-host -C database

1 つのコマンドで複数のデータベースをダンプすることができます。

shell> mysqldump --databases database1 [database2 ...] > my_databases.sql

すべてのデータベースを選択するには、以下のようにします。

shell> mysqldump --all-databases > all_databases.sql

Converted by OpenCage. Base data is http://dev.mysql.com/doc/mysql/ja/.