MySQLのbinlog(バイナリログ)とInnoDBlog(InnoDBログ)について調べたので記録しておきます。
バイナリログ
公式
https://dev.mysql.com/doc/refman/5.6/ja/binary-log.html
バイナリログには 2 つの重要な目的があります。
1.レプリケーションについて、マスターレプリケーションサーバー上のバイナリログは、スレーブサーバーに送信されるデータ変更のレコードを提供します。マスターサーバーは、そのバイナリログに格納されているイベントをそのスレーブに送信し、スレーブはこれらのイベントを実行して、マスター上で実行されたものと同じデータ変更を実行します。
2.ある特定のデータリカバリ操作には、バイナリログの使用が必要です。バックアップがリストアされたあと、バックアップが実行されたあとに記録されたバイナリログ内のイベントが再実行されます。これらのイベントは、データベースをバックアップのポイントから最新の状態に持って行きます。
つまりバイナリログとはざっくりと
- レプリケーションに使用する
- リストア(ロールフォワード)に使用する
という事でした。
また、「バイナリログは毎回の書き込みごとにディスクと同期されるわけではありません。」ともあり、同期に近い設定も出来ますが、更新したあとに作られるような理解です。
その為、クラッシュ時には最新のログが入っていない可能性がある為、ロールフォワードとレプリケーション用という理解です。
InnoDBログ
公式
https://dev.mysql.com/doc/refman/5.6/ja/innodb-configuration.html
InnoDB はトランザクションセーフな (ACID に準拠した) MySQL 用のストレージエンジンであり、ユーザーデータを保護するためのコミット、ロールバック、およびクラッシュリカバリ機能を備えています。
https://dev.mysql.com/doc/refman/5.6/ja/glossary.html#glos_redo_logib_logfile
通常は ib_logfile0 および ib_logfile1 という名前が付けられ、Redo ログを形成するファイルのセット。ロググループと呼ばれることもあります。これらのファイルは、InnoDB テーブル内のデータを変更しようとするステートメントを記録します。これらのステートメントは、クラッシュ後の起動時に、未完了のトランザクションで書き込まれたデータを修正するために自動的に再現されます。
Redo(再実行するための)ログファイルの事でした。
InnoDBを更新する為の前にため込むログファイルです。
更新前にため込むログファイルの為、最新の更新情報を持っています。
その為、クラッシュ・ロールバックに使用される理解です。
InnoDBでなくMyISAMだとどうなる?
じゃぁInnoDBではなくMyISAMだとどうなる?
InnoDBログ(最新更新情報のログ)はないので、ロールバックは出来ないようです・・・
ただし、バイナリログ(更新後に出力するログの為最新ではないログ)は出力出来るので、ロールフォワードする。
ロックダンプ+バイナリログという感じでしょうか。