mysqldumpクライアントは元はIgor Romanenkoによって書かれたバックアッププログラムです。バックアップや他のSQLサーバ(MySQLサーバに限りません)への転送のためにデータベースやデータベースのコレクションのダンプに役立ちます。ダンプには一般に、テーブルの作成やそこでのデータ配置、の片方または両方のSQLステートメントが含まれています。また、mysqldumpはCSVや他の区切り文字のテキスト、あるいはXMLフォーマットでファイルを生成させるために利用することもできます。
もしあなたがサーバのバックアップをしていて、かつテーブルがすべてMyISAM
テーブルの場合、代わりにmysqlhotcopyの使用をお勧めします。これは、バックアップやリストアのスピードが速くなるからです。項7.13. 「mysqlhotcopy — データベースバックアッププログラム」
を参照してください。
mysqldumpを起動する主な方法は3つあります。
shell>mysqldump [
shell>options
]db_name
[tables
]mysqldump [
shell>options
] --databasesdb_name1
[db_name2
db_name3
...]mysqldump [
options
] --all-databases
db_name
の後ろにテーブル名を指定しない場合、もしくは--databases
、--all-databases
オプションを使用した場合、データベース全体がダンプされます。
使用中のバージョンのmysqldumpがサポートするオプションのリストを取得するには、mysqldump --helpを実行してください。
mysqldumpの中には他オプションをグループ化した略記法となっているものがあります。--opt
や--compact
はこれに分類されるものです。例えば、--opt
を使用することは--add-drop-table
--add-locks --create-options --disable-keys --extended-insert
--lock-tables --quick
--set-charset
を指定したのと同じことです。MySQL
5.1以降、--opt
が表すオプションは全てデフォルトで有効化されています。これは、--opt
がデフォルトで有効なためです。
グループオプションの効果を逆転させる場合、オプションの--skip-
の形式(xxx
--skip-opt
や--skip-compact
など)を使用してください。グループオプションに続いて特定の機能を有効化・無効化するオプションをつけることで、グループオプションの効果の一部だけを選択することが可能です。以下に例を示します。
いくつかの機能を除いて
--opt
の効果を選択したい場合、除きたい各機能に対して--skip
オプションを選択してください。例えば、メモリバッファと拡張インサートを無効化するには、--opt
--skip-extended-insert
--skip-quick
を使用してください。(MySQL
5.1では、--skip-extended-insert
--skip-quick
で十分です。これは--opt
がデフォルトで有効になっているためです。)
インデックス無効化とテーブルロック機能を生かして
他の--opt
の機能を無効化したい場合、--skip-opt
--disable-keys
--lock-tables
を使用してください。
グループオプションの一部を選択して効果を有効化・無効化する場合、オプションは前から後ろへの順で処理されるため、記述する順番が重要になります。例えば、--disable-keys
--lock-tables
--skip-opt
は意図している効果を生みません。単一では--skip-opt
と同じになります。
mysqldumpはテーブル内容を一行ずつ取得してダンプするか、テーブルから全ての内容を取得しダンプする前にメモリでバッファすることができます。大きなテーブルをダンプしている場合、メモリへのバッファが問題になる場合があります。一行ずつテーブルをダンプする場合、--quick
オプションを使用してください(もしくは--opt
を指定すれば--quick
が含まれています)。--opt
(故に--quick
も) はMySQL
5.1以降デフォルトで有効化されています。メモリバッファを有効化するには、--skip-quick
を使用してください。
最新のmysqldumpを使用してダンプしたものを非常に古いMySQLサーバに再ロードしたい場合、--opt
または--extended-insert
オプションの使用は避けてください。代わりに--skip-opt
を使用してください。
mysqldumpは次のオプションをサポートします。
ヘルプ メッセージを表示し、閉じます。
DROP
DATABASE
ステートメントをCREATE
DATABASE
ステートメントの前に追加します。
DROP
TABLE
ステートメントをCREATE
TABLE
ステートメントの前に追加します。
LOCK TABLES
とUNLOCK
TABLES
ステートメントで各テーブルダンプを囲みます。ダンプファイルを再ロードする際のインサートの速度が向上します。項6.2.16. 「INSERT
ステートメントの速度」
を参照してください。
すべてのデータベース内のすべてのテーブルをダンプします。これは--databases
オプションを使用してコマンドラインですべてのデータベース名を指定するのと同じです。
テーブルダンプに、NDB
Cluster
テーブルに使用されるテーブルスペース作成に必要なSQLステートメントを追加します。でなければ、この情報はmysqldumpの出力には含まれていません。このオプションは、現在MySQLクラスタテーブルに対してのみ有効です。
このオプションはMySQL 5.1.6.で加されました。
キーワードであるカラム名の作成を許容します。これは各カラム名のプリフィクスにテーブル名を用いることで可能になります。
キャラクタ セットがインストールされるディレクトリです。項4.10.1. 「データおよびソート用キャラクタ セット」 を参照してください。
プログラムバージョン、サーババージョンやホストといった追加情報をダンプファイルに書き込みます。このオプションはデフォルトで有効となっています。追加情報を抑制するには、--skip-comments
を使用してください。
verbose生成を少なくします。このオプションはコメントを抑制し、--skip-add-drop-table
、--no-set-names
、--skip-disable-keys
、そして--skip-add-locks
オプションを有効化します。
古いMySQLサーバや他のデータベースシステムと互換性のある出力を生成します。name
の値はansi
、mysql323
、mysql40
、postgresql
、oracle
、mssql
、db2
、maxdb
、no_key_options
、no_table_options
、あるいはno_field_options
となります。複数の値を使用する場合カンマで離してください。これらの値はサーバSQLモードの設定用の対応しているオプションと同じ意味を持っています。項4.2.6. 「SQL モード」
を参照してください。
このオプションは他のサーバとの互換性を保証するものではありません。現在提供されている、ダンプ出力の互換性を挙げるためのSQLモード値を有効化するだけです。例えば、--compatible=oracle
はデータタイプをOracleタイプにマップしたり、Oracleコメント構文を使用したりしません。
カラム名を含んだ、完全なINSERT
ステートメントを使用します。
双方が圧縮をサポートしている場合、クライアント・サーバ間で行きかう情報を全て圧縮します。
MySQL独特のオプションをCREATE
TABLE
ステートメントに含みます。
複数のデータベースをダンプします。通常、mysqldumpはコマンドライン上の最初のアーギュメント名とそれに続く名をテーブル名として認識します。このオプションを使用するうことで、名前のついたアーギュメントを全てデータベース名として認識します。CREATE
DATABASE
やUSE
ステートメントは新しいデータベースの前の出力に含まれています。
--debug[=
,
debug_options
]-#
[
debug_options
]
デバッグのログを書き込みます。debug_options
文字列は大抵'd:t:o,
.file_name
'になります。'd:t:o,/tmp/mysqladmin.trace'
がデフォルトになります。
--default-character-set=
charset_name
charset_name
をデフォルトキャラクタセットとして使用します。項4.10.1. 「データおよびソート用キャラクタ セット」を参照してください。文字列が特定されていない場合、mysqldumpはutf8
を使用します。
INSERT
ステートメントよりもINSERT
DELAYED
ステートメントを書き出します。
マスタ複製サーバで、ダンプを実行後バイナリログを消去します。このオプションは自動的に--master-data
を有効化します。
各テーブルごとに、INSERT
ステートメントを/*!40000
ALTER TABLE
とtbl_name
DISABLE
KEYS */;/*!40000 ALTER TABLE
ステートメントで囲んでください。行が全て挿入された後にインデックスが作成されるため、ダンプファイルのロードが早くなります。このオプションはtbl_name
ENABLE KEYS
*/;MyISAM
テーブルに対してのみ効果的です。
ダンプされたデータベースからイベントをダンプします。このオプションはMySQL 5.1.8.で追加されました。
複数のVALUES
リストを含む、複数行INSERT
構文を使用してください。これにより、ダンプファイルサイズを小さくし、ファイルが再ロードされる際の挿入スピードがあがります。
--fields-terminated-by=...
,
--fields-enclosed-by=...
,
--fields-optionally-enclosed-by=...
,
--fields-escaped-by=...
これらのオプションは-T
オプションと共に使用され、LOAD
DATA
INFILE
に対応する節と同じ意味があります。項12.2.5. 「LOAD DATA INFILE
構文」
を参照してください。
Deprecated.現在は--lock-all-tables
と名づけられています。
ダンプを始める前にMySQLサーバログファイルをフラッシュします。このオプションはRELOAD
権限を要求します。このオプションを--all-databases
(あるいは-A
)
オプションと併用した場合、ログはダンプされたデータベースごとにフラッシュされます。例外は、--lock-all-tables
または--master-data
を使用しているときです。この場合、ログは全てのテーブルがロックされた瞬間に一度だけフラッシュされます。ログのフラッシュとダンプを同時に行いたい場合、--flush-logs
を--lock-all-tables
や--master-data
と併用してください。
mysql
データベースのダンプ後、.FLUSH
PRIVILEGES
ステートメントを発行してください。このオプションはダンプにmysql
データベースが含まれている場合と、正しいリストアのためにmysql
データベース内に含まれているデータに依存するデータベースが含まれている場合に使用するべきです。このオプションはMySQL
5.1.12.で追加されました。
テーブルダンプの最中にSQLエラーが発生しても続行します。
このオプションの使用例を挙げると、mysqldumpに無効となったビューに遭遇しても続けて実行させることです。これは、定義が消去されたテーブルを参照するものだからです。--force
なしでは、mysqldumpはエラーメッセージを発し閉じます。--force
を使用した場合、mysqldumpエラーメッセージをプリントしますが、ダンプ出力のビュー定義を含むSQLコメントを書き出し、実行を続けます。
--host=
,
host_name
-h
host_name
与えられたホスト上でMySQLサーバからデータをダンプします。デフォルト設定では、localhost
がホストになります。
16進変換表記法を使用しているバイナリカラムをダンプします(例えば、'abc'
は0x616263
となります)。影響を受けるデータタイプはBINARY
、VARBINARY
、BLOB
、そしてBIT
になります。
--ignore-table=
db_name.tbl_name
データベースとテーブル名の両方を使用して特定されなければいけないテーブルをダンプしないでください。複数テーブルを無視するには、このオプションを複数回使用してください。
INSERT
ステートメントをIGNORE
オプションで書いてください。
これらのオプションは-T
オプションと共に使用され、LOAD
DATA
INFILE
に対応する節と同じ意味があります。項12.2.5. 「LOAD DATA INFILE
構文」
を参照してください。
データベース内のテーブルを全てロックします。これは全ダンプの期間、グローバルリードロックを取得することで達成されます。このオプションは自動的に--single-transaction
と--lock-tables
をオフにします。
ダンプする前に全てのテーブルをロックします。テーブルはREAD
LOCAL
でロックされ、これによりMyISAM
テーブルの場合同時インサートが許容されます。InnoDB
といったトランザクションテーブルには、--single-transaction
はテーブルをロックする必要が無いため、はるかにいいオプションです。
複数データベースをダンプする際は、--lock-tables
は各データベースのテーブルを個別にロックします。よって、このオプションはダンプファイル内のテーブルがデータベース間で矛盾していないことを保証するわけではありません。異なるデータベース内のテーブルは完全に異なるステートでダンプされることがあります。
出力にバイナリログファイル名とポジションを書きます。このオプションはRELOAD
権限を要求し、バイナリログが有効化されていなければいけません。オプション値が1と等価の場合、ポジションとファイル名はダンプ出力に書き出され、CHANGE
MASTER
ステートメントのフォームを取ります。ダンプがマスタサーバから行われ、それを利用してスレーブサーバをセットアップする場合、CHANGE
MASTER
ステートメントはスレーブを、マスタのバイナリログ内の正しいポジションからスタートするようにします。オプション値が2と等価の場合、CHANGE
MASTER
ステートメントはSQLコメントとして書かれます。(値
が省かれていた場合のデフォルトアクションになります。)
--master-data
オプションは自動的に--lock-tables
をオフにします。--single-transaction
も指定されていなければ、--lock-all-tables
をオンにもします(この場合、global
read
lockがダンプの最初に短い間、取得されています)。--single-transaction
の説明も参照してください。どの場合でも、ログに対するアクションは全てダンプと同時に発生します。
各ダンプされたテーブルごとにINSERT
ステートメントをSET
AUTOCOMMIT=0
とCOMMIT
ステートメントで囲みます。
このオプションは--databases
や--all-databases
オプションが提供されていた場合出力に含まれるCREATE
DATABASE
ステートメントを抑制します。
各ダンプされたテーブルを再作成するCREATE
TABLE
ステートメントを書かないでください。
テーブル行情報を書かないでください(つまりテーブル内容をダンプしないでください)。これはテーブルのCREATE
TABLE
ステートメントのみをダンプしたい場合に非常に便利です。
このオプションはショートハンドです。--add-drop-table
--add-locks --create-options --disable-keys
--extended-insert --lock-tables --quick
--set-charset
を特定することと同じことです。速いダンプオプレーションを提供し、MySQLサーバにすばやく再ロードできるダンプファイルを生成します。
--opt
オプションはデフォルトで有効化されています。無効化するには--skip-opt
を使用してください。--opt
によって影響されるオプションの部分の一部を有効化・無効化する情報に関しては、このセクションの始めのディスカッションを参照してください。
各テーブルの行をプライマリキーか、存在する場合、最初のユニークインデックスでソートします。これは、InnoDB
テーブルにロードするMyISAM
テーブルをダンプしているときに便利ですが、ダンプに要する時間がかなり伸びます。
--password[=
,
password
]-p[
password
]
サーバに接続する際使用するパスワードです。ショートオプションフォーム(-p
)を使用した場合、オプションとパスワードの間にスペースを置くことはできません。コマンドライン上で--password
あるいは-p
に続くオプションからpassword
値を取り除いた場合、パスワード値を求められます。
コマンドライン上でのパスワードの特定は安全ではありません。項4.8.6. 「パスワードのセキュリティ」 を参照してください。
コネクションに使用するTCP/IPポート番号です。
--protocol={TCP|SOCKET|PIPE|MEMORY}
使用するべき接続プロトコルです。
このオプションは大きなテーブルのダンプに便利です。これにより、mysqldumpは全結果セットを取得、メモリ内でバッファ後表示といった一連の作業を一気にこなさず、サーバから1行ずつ結果を取得します。
‘`
’文字でデータベース、テーブル、そしてカラム名をクオートします。ANSI_QUOTES
SQLモードが有効化されている場合、名前は‘"
’キャラクタでクオートされます。このオプションはデフォルトで有効となっています。--skip-quote-names
で無効化することもできますが、このオプションは--compatible
のような--quote-names
を有効化するオプションの後に与えられるべきです。
INSERT
ステートメントよりもREPLACE
ステートメントを書き出します。MySQL
5.1.3.より提供されています。
提供されているファイルに出力を導きます。このオプションはWindows上で‘\n
’ニューライン文字が‘\r\n
’carriage
return/newlineシーケンスに変換されるのを阻止するために使用します。ダンプ生成中にエラーが発生しても、結果ファイルは作成され、内容は上書きされます。以前の内容は失われます。
記憶されたルーチンを(関数とプロシージャ)
ダンプされたデータベースからダンプします。.このオプションの使用はmysql.proc
テーブルのためのSELECT
権限を要求します。--routines
を使用して生成された出力はルーチンの再作成のため、CREATE
PROCEDURE
とCREATE
FUNCTION
ステートメントを含んでいます。ただし、これらのステートメントはルーチン作成や改良タイムスタンプといった属性を含んでいません。つまりルーチンが再ロードされたとき、再ロードに要した時間と等価のタイムスタンプで作成されます。
ルーチンを元のタイムスタンプ属性で再作成しなければいけない場合、--routines
を使用しないでください。代わりに、mysql
データベースの正しい権限を持っているMySQLアカウントを使用してmysql.proc
テーブルの内容を直接ダンプ、再ロードしてください。
このオプションはMySQL
5.1.2.で追加されました。これ以前では、記憶されたルーチンはダンプされませんでした。ルーチンDEFINER
値はMySQL
5.1.8.までダンプされませんでした。つまり、5.1.8,以前でルーチンが再ロードされた場合、再ロードユーザにセットされたデファイナで作成されます。元のデファイナでルーチンを再作成しなければいけない場合、mysql.proc
テーブルの内容を、以前説明したとおりに、直接ダンプしロードしてください。
出力にSET NAMES
を追加してください。このオプションはデフォルトで有効となっています。default_character_set
SET
NAMES
ステートメントを抑制するには、--skip-set-charset
を使用してください。
このオプションはサーバからデータをダンプする前にBEGIN
SQLステートメントを発行します。InnoDB
といったトランザクションテーブルに対してのみ便利です。なぜなら、アプリケーションをブロックせずに、BEGIN
が発行された当時のデータベースの状態をダンプするからです。
このオプションを使用しているときは、一定の状態でダンプされるのはInnoDB
テーブルのみだということを留意してください。例えば、このオプションを使用中にダンプされたMyISAM
やMEMORY
テーブルは状態が変化する可能性があります。
このオプションはMySQLクラスタテーブルではサポートされていません。NDBCluster
ストレージエンジンがREAD_COMMITTED
transaction
isolation
levelのみをサポートするため、結果が一定である保証がありません。代わりに必ずNDB
バックアップを使用し、リストアしてください。
--single-transaction
オプションと--lock-tables
は互いに関連していません。これは、LOCK
TABLES
が待機中のトランザクションを必然的にコミットさせるからです。
大きなテーブルをダンプするには、このオプションを--quick
と併用してください。
--opt
オプションの詳細を参照してください。
localhost
の接続用に使用する、ユニックスではソケットファイル、Windowsでは使用する名づけられたパイプ。
--comments
オプションの詳細を参照してください。
--ssl
で始まるオプションは、SSLを介してサーバに接続し、SSL
キーや証明の場所を明示するか否かを指定します。項4.8.7.3. 「SSL コマンド オプション」
を参照してください。
タブによって分けられたデータファイルを生成します。各ダンプされたテーブルごとに、mysqldumpはテーブルを作成するCREATE
TABLE
ステートメントを含む
ファイルと、そのデータを含むtbl_name
.sql
ファイルを作成します。オプション値はファイルを書き込むディレクトリです。
tbl_name
.txt
デフォルトで、.txt
データファイルはカラム値と、各行の最後で新しいラインの間にタブキャラクタを使用してフォーマットされます。このフォーマットは明示的に--fields-
とxxx
--lines-terminated-by
オプションを使用することで特定することができます。
注:このオプションはmysqldumpがmysqldサーバと同一のマシンで作動している場合のみ使用されるべきです。FILE
権限を保持しており、サーバはユーザの指定してアファイルをディレクトリ内に書き込む権限を与えられていなければいけません。
--databases
あるいは-B
オプションをオーバーライドしてください。mysqldumpはオプションに続く名前アーギュメントをテーブル名として認識しています。
ダンプされたテーブルごとにトリガをダンプします。このオプションはデフォルトで有効化されています。--skip-triggers
を使用して無効化してください。
ダンプファイルにSET
TIME_ZONE='+00:00'
を追加してください。これにより、TIMESTAMP
カラムは異なるタイムゾーンにあるサーバ間でダンプ・再ロードされます。このオプションなしでは、TIMESTAMP
カラムはソースとデスティネーションサーバのタイムゾーンにダンプ・再ロードされ、値が変わる場合があります。--tz-utc
はサマータイムによる時間の変更に対してもプロテクトします。--tz-utc
はデフォルトで有効化されています。無効化するには、--skip-tz-utc
を使用してください。このオプションはMySQL
5.1.2.で追加されました。
--user=
,
user_name
-u
user_name
サーバに接続する際使用するMySQLユーザ名です。
Verbose モードプログラムの動作についてさらに情報をプリントアウトする。
バージョン情報を表示し、閉じます。
--where='
,
where_condition
'-w
'
where_condition
'
あるWHERE
状態に選択された行のみダンプします。ユーザのコマンドインタープリタにとって特別なキャラクタ、もしくはスペースを含んでいる場合、状態の周りをクオートで囲まなければいけません。
例:
--where="user='jimf'" -w"userid>1" -w"userid<1"
ダンプ出力と、well-formed XMLも書き出します。
NULL
,
'NULL'
, and Empty
Values:column_name
と名づけられたカラム、NULL
値、空の文字列、文字値'NULL'
はこのオプションによって生成された出力では以下の様に差別化します。
値: | XML Representation: |
NULL (unknown value) |
<field
name=" |
'' (empty string) |
<field
name=" |
'NULL' (string value) |
<field
name=" |
MySQL
5.1.12に始まり、--xml
オプションを使用しているときのmysqlクライアントもこれらのルールを守ります。(詳しくは項7.7.1. 「mysql オプション」をご確認ください。)
--
構文を使用することで以下の構文をセットすることができます。
var_name
=value
max_allowed_packet
クライアント・サーバ通信のバッファの最大サイズ最大は1GBです。
net_buffer_length
クライアント・サーバ通信のバッファの初期サイズ複数・行・挿入ステートメントを作成する際(--extended-insert
や--opt
オプションを使用するとき)、mysqldump
はnet_buffer_length
長さの新しい行を作成します。この変数を増やした場合、MySQLサーバ内のnet_buffer_length
変数も最低同じ大きさでなければいけません。
--set-variable=
or var_name
=value
-O
構文を使用することで、変数をセットすることも可能です。構文は反対語となっています。.
var_name
=value
mysqldumpの最も一般的な用途は、データベース全体のバックアップの作成です。
shell> mysqldump db_name
> backup-file.sql
ダンプファイルをサーバに戻し読みすることが可能です。
shell> mysql db_name
< backup-file.sql
また、次のようにもできます。
shell> mysql -e "source /path-to-backup/backup-file.sql
" db_name
mysqldumpは1つのMySQLサーバからデータをコピーすることでデータベースのpopulatingに便利です。
shell> mysqldump --opt db_name
| mysql --host=remote_host
-C db_name
1つのコマンドで複数のデータベースをダンプすることが可能です。
shell> mysqldump --databases db_name1
[db_name2
...] > my_databases.sql
全てのデータベースをダンプするには、--all-databases
オプションを使用してください。
shell> mysqldump --all-databases > all_databases.sql
InnoDB
テーブルに関して、mysqldump
はオンラインバックアップの作成方法を提供しています。
shell> mysqldump --all-databases --single-transaction > all_databases.sql
このバックアップはグローバルリードロックをダンプの最初に、全テーブルで取得することだけが必要です(FLUSH
TABLES WITH READ
LOCK
を使用して)。このロックが取得されれば、バイナリログの座標は読まれ、ロックが開放されます。FLUSH
ステートメントが発行されている際、1つの長い更新ステートメントが作動している場合にのみ、MySQLサーバはその長いステートメントが終了するまでストールすれば、ダンプがロックフリーとなります。MySQLサーバが受ける更新ステートメントが短い場合(実行時間を指す)、更新の数が多くても最初のロック期間はさほど気にならないはずです。
point-in-timeリカバリは、(もしくは「roll-forward」ーこれは古いバックアップをリストア、そのバックアップが行われてから発生した変更を再生する場合)、バイナリログを回転する、もしくはダンプが対応しているバイナリログの座標だけでも知っているとと便利な場合があります(項4.11.4. 「バイナリ ログ」を参照して下さい)。
shell> mysqldump --all-databases --master-data=2 > all_databases.sql
または
shell>mysqldump --all-databases --flush-logs --master-data=2
> all_databases.sql
--master-data
と--single-transaction
オプションは同時に使用することができ、テーブルがInnoDB
ストレージエンジンを使用して記憶されている場合、point
in
timeリカバリに合うオンラインバックアップを作成する便利な方法を提供しています。
バックアップ作成の追加情報に関しては、項4.9.1. 「データベースのバックアップ」と項4.9.2. 「バックアップとリカバリ手法の例示」を参照してください。
ビューのバックアップの際問題が発生した場合、ビューに対する制限を含むセクションを参照してください。権限が不足している事によって失敗した場合の、ビューバックアップ解決策を記しています。項D.4. 「ビューの規制」 を参照してください。