weblog of key_amb

主にIT関連の技術メモ

MySQL binlog_format とバイナリロギング、レプリケーションについて

少し雑なメモです。

MySQL で binlog を記録するかどうかについて。
master で binlog を書き込まなければ、レプリケーションもされません。

--binlog-do-db (master 側) や --replicate-do-db (slave 側) のようなオプションは運用従事者ならご存知の方も多いと思いますが、master の binlog_format によっても、binlog に書き込むか否かに差異があります。

MySQL 5.6 の場合、↓のページでフローチャートに表されています。

MySQL :: MySQL 5.6 リファレンスマニュアル :: 17.2.3.1 データベースレベルレプリケーションオプションおよびバイナリロギングオプションの評価

TL;DR

binlog に記録するか否か。
(※ "◯" と付いている場合、実際には --binlog-do-db--replicate-do-db などの評価に進む)

binlog_format 対象の DB を Use している 実際に変更が有る
STATEMENT,MIXED -
ROW -

つまり、

  • STATEMENT, MIXED のときは、対象 DB を Use していないとバイナリログに記録されず、レプリケーションもされません。
  • ROW のときは、対象 DB を Use してようがしていまいが、実際に更新される行があればバイナリログに記録され、レプリケーションもされます。

--binlog-do-db, --replicate-do-db などのオプションが全くない場合

binlog_format=MIXED については、上のページでは述べられていませんが、手元の MySQL(5.6系)で試したところ、 STATEMENT と同じ挙動でした。