mysqldump について


mysqldump について個人的なメモをまとめておきます

日本語の公式ドキュメントが 5.6 のバージョンで止まっている

日本語の方はすべて 5.6 にリダイレクトされてしまいます
https://dev.mysql.com/doc/refman/5.6/ja/mysqldump.html

英語の方はすべてのバージョンを確認できます!
https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html
https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html
https://dev.mysql.com/doc/refman/5.6/en/mysqldump.html

基本的な呼び出し構文

# DB、 DB の Tables
mysqldump [options] db_name [tbl_name ...]

# 複数の DB
mysqldump [options] --databases db_name ...

# すべての DB
mysqldump [options] --all-databases

よく使うコマンド

基本的に DB ユーザーの見れる範囲のバックアップをとることが多いのかなぁ
なんて思ってるので --all-databases にしてます
※ MySQL 5.7 以降はデフォルトで InnoDB が選択されているため、他の DB エンジンのことは考慮してません。

mysqldump -h ${HOST_NAME} -P ${PORT} -u${USER_NAME} -p${USER_PASSWORD} --skip-lock-tables --single-transaction --all-databases > ${OUTPUT_FILE}

デフォルトで --opt が有効になっている

このオプションは、複数のオプションを組み合わせた省略形です。
高速なダンプ操作ができるようになっています。もし無効にしたい場合は、--skip-opt を指定します。
下記は組み合わせられているオプションたちです。

オプション名 説明
--add-drop-table 各 CREATE TABLE の前に DROP TABLE を書く。
--add-locks LOCK TABLES と UNLOCK TABLES で各テーブルダンプを囲む。これによって、インサートが高速化される。
--create-options CREATE TABLE にすべての MySQL 固有のテーブルオプションを含める。
--disable-keys 各テーブルで、INSERT を ENABLE KEYS と DISABLE KEYS で囲む。これにより、すべての行が挿入された後にインデックスが作成されるため、ダンプファイルの読み込みが高速になる。
--extended-insert 複数行の INSERT 構文 VALUES を利用して、ダンプファイルが小さくなり、ファイルのリロード時のインサートが高速化される。
--lock-tables 各 DB で、 ダンプされる前にすべてのテーブルをロックする。InnoDB などのトランザクションが使えるものでは --single-transaction の方が優秀。それぞれの DB のテーブルごとにロックするため、一貫性が保証されない(異なる DB の場合はさらに)。無効にしたい場合、--skip-lock-tables を追加する。
--quick 大きなテーブルのダンプに役立つ。record 全体を取得してメモリにバッファリングしてから書き出すのではなく、サーバーからテーブルの行を一度に1行ずつ取得するようにmysqldumpを強制する。
--set-charset default_character_set を出力に書き込む。無効にしたい場合、--skip-set-charset を追加する。

その他のよく使うオプション

オプション名 説明
--single-transaction データをダンプする前に、トランザクション分離モードを REPEATABLE READ に設定し、START TRANSACTION SQL ステートメントをサーバーに送信する。MyISAM または MEMORY のテーブルでは一貫性が保証されないことには注意。
--skip-lock-tables --lock-tables を無効にする。
--skip-opt --opt を無効にする。
--flush-logs ダンプを開始する前に MySQL サーバーのログファイルをフラッシュする。
--lock-all-tables DB 内のテーブル全てをロックする。
--master-data バイナリログファイルの名前と場所を追記する。自動的に --lock-tables が無効になり、--single-transaction が指定されてない場合は、--lock-all-tables が有効になる。
--no-data テーブルの中身をダンプしない。定義のみダンプしたい時に指定する。
--no-create-db CREATE DATABASE を入れない。
--no-create-info CREATE TABLE を入れない。

おわりに

他に何かご存知の方がいらっしゃったら
コメントなり編集リクエストなりで教えていただけると幸いです