レプリケーション
MySQL のレプリケーションについて書く
とは?
動作原理
Master, Slave を用意する
Master を更新する
更新内容を同じ順番で Slave にも順次適用する
Master に対する変更を Slave にも適用し続けることで、同一性を担保する
結果整合性モデル
Slave のセットアップ時には、データを全て dump & restore しておく必要がある
同じ更新を適用していく のが基本なので、スタート時点では同じデータを持っている必要がある
注意
SQL の実行結果が常に同じにならないようなステートメント はレプリケーションできない
例)
ユーザ定義関数
非決定的な関数 (UUID(), USER(), LOAD_FILE())
ORDER BY 句なしの LIMIT
...
全体的な注意点
Slave に更新をかけてはいけない
アーキテクチャ
MySQL のレプリケーション機能は 3つのスレッド で実装される。Master 側は 1 つ、Slave 側は 2 つ。
Master 側の Thread
COM_BINLOG_DUMP コマンドを Slave から受け取る
REPLICATION SLAVE 権限が必要
Slave 側の Thread
目的 Master から受け取った更新を リレーログに記録する 手順
Master へ接続する
COM_BINLOG_DUMP コマンドを発行して Master から継続的に更新を受け取る
Slave 側の Thread
目的 リレーログ の内容を Slave の Storage に適用する 特徴
実行に時間がかかるような SQL が存在しても、継続的にバイナリログを Master から受け取り続けることができる Slave への反映の遅延は、この SQL の実行時間 によるもの
データの同一性を保証するために必要
手順
1. Executor が Storage, binlog に書き込む
https://gyazo.com/1607402d5ce77f319ad3dc97d9eaaee9