oinume journal

Scratchpad of what I learned

mysqldumpでバックアップをする時につけるオプション

MySQLのデータベースをバックアップする際にmysqldumpを使用しますが、個人的に「これはつけたらよさそう」と思っているオプションを紹介します。

--opt

--quick --add-drop-table --add-locks --extended-insert --lock-tables を指定するのと同じです。ダンプしたデータをMySQL サーバに読み込むための最速ダンプを提供します。(マニュアルそのまんま)

--single-transaction

ダンプする際に先頭にBEGINをつけるため、ダンプ時のデータのトランザクションの一貫性を保つことができます。ただしInnoDBなどのトランザクションが有効なストレージエンジンではないと意味がないです。

--flush-logs

ダンプを開始する前に、MySQL サーバ内のログファイルをフラッシュします。バイナリログを保存するような設定になっている場合はこれがフラッシュされます。ダンプしたデータとバイナリログを使用してデータを復元する場合に有用です。

--master-data

CHANGE MASTER TOコマンドをダンプの先頭に付加します。--master-data=2を指定するとCHANGE MASTER TOがコメントアウトされた状態になります。--maser-data=1と指定するとコメントアウトされずにダンプされます。

--default-character-set

ダンプする際の文字コードを指定します。

--hex-blob

バイナリ型のデータをエスケープ処理を行わずに実際に格納された値の16進表記でダンプします。 これを指定しないと default-character-set がSJIS系の場合エスケープ処理に失敗し、バイナリデータが壊れてしまう場合があります。

まとめ

自分はこんな感じでバックアップをとっています。

$ mysqldump -uroot -pxxxxxxxx --opt --flush-logs --single-transaction --master-data=2 --default-character-set=utf8 --hex-blob $database