見出し画像

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のバージョンではこの設定に特有のオプションはない

  • 注意点

    • 将来のバージョンで新しいオプションが追加される可能性がある


ここまでお読みいただきありがとうございました!

参考


この記事が気に入ったらサポートをしてみませんか?