MySQLのバックアップ方法とMySQL5.1.41へのバージョンアップ

いつの間にかMySQL5.1.41がリリースされてますた。
という訳でバージョンうpします。

今はMySQL5.1.40を使ってるからたった0.0.1だけリビジョン上げるんで意味なさそうだけど、
まだ今ならプロジェクトにも影響はないと判断したんでバージョンを上げます。

で、パージョンアップした事ないんで調べてみたけど、
一番簡単な方法は、5.1.40のデータをバックアップ(mysqldump)して、5.1.40を消して、5.1.41をインストールして、5.1.41にデータをインポートする
というのが一番簡単みたい。

じゃあ早速やってみましょう。ちなみにMySQLは1つです。レプリケーションでのバックアップとかは他のページへどうぞ。

  • 対象データをダンプ

今回は、システム系のテーブル以外は全てInnoDBを使ってるからmysqldumpを使ってデータをダンプする。
バックアップはオンラインバックアップを考えてるからオプションで色々指定する。

# mysqldump --opt --default-character-set=utf8  --flush-log --hex-blob --master-data=2 --single-transaction hogedb > hoge.sql -u hogeuser -p

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がデフォルトで有効なためです。

他のオプションも以下の通り。

・--default-character-set
ダンプする際の文字コードの指定する。今回はutf8を使用してるんでそのままutf=8をセット。
無くてもデフォルトでutf8がセットされるけど明示的に分かるように指定する。

・--flush-log
ダンプする前にサーバ内のログファイルをフラッシュ(要はログファイルにメモリ上の内容を出力するっちゅうわけやね)を行うための指定。
ダンプしたデータとバイナリログを使用してリカバリする際に利用する。

・--hex-blob
バイナリデータをエンコード処理を行わずにそのまま16進数でダンプする。例えば、'abc'は0x616263となる。
影響を受けるデータタイプはBINARY、VARBINARY、BLOB、BITなので、BLOBを使ってるなら必ず指定する。
そうしないとバイナリデータが壊れて復旧できずにアボンする。

・--master-data
これが一番意味が分からなかったんだよな。どうやら、リカバリ時にバイナリログを使って復旧する時やレプリケーションする時に使用すれば良いみたい。
どういう事かというと、バイナリログはローテーションしてるけど、そのローテーションを覚えておかないと復旧できなくなってしまいます。
それを覚えとく為にこのオプションを使うと最後のローテーションされたファイルを覚えてくれるみたい。
master-data なし→CHANGE MASTER文は出力されない、1→CHANGE MASTER文をそのまま出力する、2→コメントにする
という事なので、今回はコメントで良いから2を指定してます。
CHANGE MASTER TO文は勉強中ですが、レプリケーションする際は1を設定するみたいです。
この詳しい内容は他のサイトを参考にしてください。


・--single-transaction
データをダンプする前にBEGIN SQLステートメントを発行してからダンプを取るので、BEGINが発行された当時のデータの状態を保障する。
但し、InnoDBといったトランザクションテーブルに対してのみ有効。
これを指定する事で一貫性のあるデータがバックアップ出来るので、オンラインバックアップを想定している時は必要という事だな。

  • single-transactionが指定されていなければ、自動的に--lock-all-tablesをオンにするからオンラインバックアップだと

テーブルがロックされてしまってえらいこっちゃになるのでInnoDBかつオンラインバックアップの人は指定しましょう。
MyISAMの場合、トランザクションがないから--single-transactionなしで全テーブルにロックをかけて更新を防止しないと一貫性のあるバックアップがとれません。


バイナリログはデフォルトインストールだと出来ないんで、my.cnfに設定を書いてください。内容は割愛しますが。

という訳で、ここまで書いてギブアップ。続きはまた明日。