バックアップ用のデータベースまたはデータベースの集合をダンプしたり、他の 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 オプションに基づく。注意: このオプションは、mysqldump が mysqld デーモンと同じマシンで実行している場合のみ有効。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 オプションと同様)、mysqldump は net_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