バイナリログとは
マスタのDBの 更新命令のみ を記録したログファイル
マスタ/スレーブ間の同期(レプリケーション)で使用する
my.cnf
にlog-bin
オプションを設定すると、バイナリログが作成されるようになる
バイナリログの保存形式
STATEMENT
, ROW
, MIXED
の3種類がある。binlog-format
オプションで設定可能。デフォルトは、STATMENT
STATEMENT
: SQL文をそのまま保持- メリット: サイズが小さい
- デメリット: 非決定的な命令(後述) が発生すると、マスタ/スレーブ間で差異が生じる
ROW
: DBの行をどのように更新したか? という情報を保持- メリット: 非決定的な命令が発生しても同期を維持できる
- デメリット: サイズが大きい。大量に更新があるとHDDや帯域を圧迫する
MIXED
: 非決定的な命令のみROW
形式で保持- メリット:
ROW
形式のバイナリログより小さいサイズで、非決定的な命令が発生しても同期を維持できる - デメリット:
STATEMENT
形式のバイナリログよりはサイズが大きい
- メリット:
非決定的な命令とは
「ORDER BY
が指定されていない INSERT
」や UUID()
など、結果が固定されていない命令を指す
マスタのバイナリログのステータス確認方法
SHOW MASTER STATUS
で確認可能
例
mysql> SHOW MASTER STATUS\G *************************** 1. row *************************** File: master-bin.000002 Position: 1307 Binlog_Do_DB: test Binlog_Ignore_DB: manual, mysql Executed_Gtid_Set: 3E11FA47-71CA-11E1-9E33-C80AA9429562:1-5 1 row in set (0.00 sec)
- File : 現在のバイナリログの格納先
- Position: バイナリログの座標(ポジション)
- Binlog_Do_DB : レプリケーション対象のDB
- Binlog_Ignore_DB : レプリケーション対象外のDB
- Executed_Gtid_Set : GTIDの値(今回は解説しない)
参考
- バイナリログのフォーマットについて – sawara.me : 実際の中身について詳しく解説されている