![見出し画像](https://assets.st-note.com/production/uploads/images/115929077/rectangle_large_type_2_abfd52438f384faa59e1890696906d68.png?width=1200)
MySQL_バイナリログの設定 #416
久々にAWS関連以外の投稿です。
MySQLのバイナリログの設定について調べる機会があったので整理してみました。
バイナリログとは
バイナリログとは、MySQLのデータ変更(例: INSERT, UPDATE, DELETEクエリ)を記録するログです。主にレプリケーションとデータの復旧に使用されます。
その設定には以下のオプションがあります。
log_bin =
binlog_format =
binlog_row_image =
binlog_row_metadata =
binlog_row_value_options =
AWS RDSなどではマネージドな部分なので意識することはありませんが、自分でMySQLを構築する場合は設定が必要です。
バイナリログの設定オプション
log_bin
意味
バイナリログ (Binary Log) を有効または無効にするもの
オプション
onかoff
バイナリログを記録するかしないか
注意点
バイナリログはディスクのI/Oを増加させる可能性があり、パフォーマンスに影響を及ぼす場合がある
定期的なログローテーションや削除が必要(時間と共に大きくなる)
binlog_format
意味
バイナリログのフォーマットを設定する
オプション
ROW
各行の変更を記録する
MySQLの公式ドキュメントによるとデフォルトはROW
STATEMENT
実行されたステートメント(SQL)を記録
MIXED
行ベースレプリケーションが適切な結果になることが保証されている場合を除き、ステートメントベースレプリケーションが使用される
たとえば、これはユーザー定義関数 (UDF) または UUID() 関数がステートメントに含まれているときに発生する
注意点
ROWは変更の内容が明確なためデバッグが容易だが、大量の変更がある場合、ログのサイズが大きくなる
STATEMENTは、すべてのステートメントが確実に再現可能ではない
binlog_row_metadata
意味
行ベースロギングの使用時にバイナリログに追加されるテーブルメタデータの量を構成
バイナリログに記録されるメタデータは、レプリカがステートメントを正確に再現するための情報を提供する
オプション
FULL
すべてのメタデータを記録する
テーブルのカラム名、カラムの型、カラムのコラーション、カラムのその他の属性情報などが含まれる
MINIMAL
必要最低限のメタデータのみを記録する(SIGNED フラグ、カラム文字セット、ジオメトリタイプに関連するメタデータのみ)
テーブルのカラム名やカラムの型などの情報は含まれない
そのため、レプリカはマスターサーバーと同じテーブル構造を持っている必要がある
注意点
FULL を使用するとログのサイズが大きくなる可能性がある
binlog_row_image
意味
どれだけのデータをROW形式のバイナリログに書き込むかを設定
オプション
FULL
変更された行の全てのカラムを記録する
MINIMAL
変更された行の中で実際に変更されたカラム、変更行を特定するために必要とされたカラムのみ記録する
NOBLOB
全てのカラムのログを記録する (full と同じ) が、行の識別に必要がない、または変更されなかった BLOB及びTEXT カラムは除く
BLOBやTEXTカラムはサイズが大きくなることが多いため、このオプションによって制御できる
注意点
FULL を使用するとログのサイズが大きくなる可能性がある
binlog_row_value_options
意味
ROW形式のバイナリログに対する追加オプションを指定する
役割
現在のMySQLのバージョンではこの設定に特有のオプションはない
注意点
将来のバージョンで新しいオプションが追加される可能性がある
ここまでお読みいただきありがとうございました!