MySQL ストアドプログラムのバイナリロギング メモ

そもそもバイナリログって?

要するにレプリケーションするために必要なイベントが記録されているログ。

ストアドプログラムのバイナリロギング

MySQL :: MySQL 5.6 リファレンスマニュアル :: 20.7 ストアドプログラムのバイナリロギング

  • ロギングがステートメントレベルで行われる場合、ストアドプログラムに関して該当するバイナリロギングの問題がある
    • ※ストアドプログラム -> ストアドプロシージャ、ストアドファンクション、トリガー、イベント
  • ステートメントがマスターとスレーブで別々の行に影響する場合がある
  • SQLステートメントレベルでバイナリロギングが行われるときに起こる
  • ルーチンorトリガーが実行されると行を変更は記録されるが変更をおこなったステートメントは記録されない
    • ストアドプロシージャーでいうCALLが記録されない

プログラムの内容は記録されず、行の変更のみ記録されてそれがレプリケーションに利用されるということ。

  • ストアドファンクションを利用するための条件
    • CREATE ROUTINE or ALTER ROUTINEと、SUPER 権限が必要
    • CREATE FUNCTIONの際は DETERMINISTICNO SQL または READS SQL DATA の少なくとも 1 つを明示的に指定する必要
    • 上記を緩和するために log_bin_trust_function_creators に1に設定できる
  • トリガーは DETERMINISTIC 指定がないので常に決定的
    • ただし UUID() などは注意が必要