MySQLバイナリログとInnoDBログとは

MySQLのbinlog(バイナリログ)とInnoDBlog(InnoDBログ)について調べたので記録しておきます。

スポンサーリンク

バイナリログ

公式

https://dev.mysql.com/doc/refman/5.6/ja/binary-log.html

バイナリログには 2 つの重要な目的があります。

1.レプリケーションについて、マスターレプリケーションサーバー上のバイナリログは、スレーブサーバーに送信されるデータ変更のレコードを提供します。マスターサーバーは、そのバイナリログに格納されているイベントをそのスレーブに送信し、スレーブはこれらのイベントを実行して、マスター上で実行されたものと同じデータ変更を実行します。

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_log

ib_logfile
通常は ib_logfile0 および ib_logfile1 という名前が付けられ、Redo ログを形成するファイルのセット。ロググループと呼ばれることもあります。これらのファイルは、InnoDB テーブル内のデータを変更しようとするステートメントを記録します。これらのステートメントは、クラッシュ後の起動時に、未完了のトランザクションで書き込まれたデータを修正するために自動的に再現されます。

Redo(再実行するための)ログファイルの事でした。

InnoDBを更新する為の前にため込むログファイルです。

更新前にため込むログファイルの為、最新の更新情報を持っています。

その為、クラッシュ・ロールバックに使用される理解です。

InnoDBでなくMyISAMだとどうなる?

じゃぁInnoDBではなくMyISAMだとどうなる?

InnoDBログ(最新更新情報のログ)はないので、ロールバックは出来ないようです・・・

ただし、バイナリログ(更新後に出力するログの為最新ではないログ)は出力出来るので、ロールフォワードする。

ロックダンプ+バイナリログという感じでしょうか。

バイナリログ削除で容量確保

Vagrantの容量が減らなかったのはMySQLのバイナリログが原因だった[Windows VirtualBox]
この記事でVagrantの容量肥大化の為の拡張と圧縮を行いました。 ですが、容量上限は増えたものの、現在の容量の圧縮がうまくいきません...

MySQL操作メモ

MySQL操作まとめ(エクスポート、ダンプ、インポート、レプリケーション、起動、権限、確認、ユーザ、バイナリログ、InnoDBログ、MyISAM、InnoDB、SQL)
MySQLの操作まとめページです。 ダンプ(エクスポート・インポート) エクスポート $ mysqldump -u -p > ...