2011-08-06 12 views
5

私はちょっと混乱を避けるために探しています。私はマスター+スレーブ設定を持っています。私には1人のマスターと3人の奴隷がいる。すべての書き込み(INSERT|UPDATE|DELETE)がマスターになります。すべての読み取り(SELECT)はランダムに選択されたスレーブのいずれかに行きます。すべてのテーブルがInnoDBストレージエンジンを使用しています。トランザクションとマスター+スレーブレプリケーション

この設定でMySQL/InnoDBがどのようにトランザクションを処理するのか不思議です。 MySQLがトランザクション内の各変更をバイナリログに書き込む場合は、すべて正常でなければなりません。しかし、トランザクションがコミットされるまで、binlogが書き込まれないと大きな問題があることがわかります。

レプリケーションとのトランザクション中にMySQL内で何が起こっているのか誰でも説明できますか?

答えて

0

一般に、トランザクションがコミットされるまでバイナリログに書き込まれない場合。テーブルがトランザクショナルであると仮定すると、トランザクション内のすべてのステートメントは1つのBEGIN \ COMMITステートメントにグループ化されます。

0

thisによれば、スレーブはトランザクションがコミットされた後にのみ変更を見ることができます。

マスターで失敗したトランザクションは、レプリケーションにまったく影響しません。 MySQLレプリケーションはバイナリログに基づいています。ここでMySQLはデータを変更するSQL文を書き込みます。失敗したトランザクション(たとえば、外部キー違反のため、またはロールバックされたため)はバイナリログに書き込まれないため、スレーブには送信されません。

そしてthis確認:

をバイナリログがクラッシュセーフです。完全なイベントまたはトランザクションのみが記録または読み取られます。

関連する問題