2011-08-06 2 views
5

Je cherche à dissiper un peu de confusion. J'ai une configuration maître + esclaves. J'ai un maître et 3 esclaves. Toutes les écritures (INSERT|UPDATE|DELETE) vont le maître. Toutes les lectures (SELECT) vont à l'un des esclaves, qui est choisi au hasard. Toutes mes tables utilisent le moteur de stockage InnoDB.Transactions et réplication maître + esclave

Je suis curieux de savoir comment MySQL/InnoDB gère les transactions dans cette configuration. Si MySQL écrit chaque changement dans la transaction dans le journal binlog, alors tout devrait bien se passer. Cependant, je peux voir qu'il y a de gros problèmes si le binlog n'est pas écrit tant que la transaction n'est pas validée.

Quelqu'un peut-il expliquer ce qui se passe dans MySQL pendant la transaction avec la réplication en place?

Répondre

0

Généralement, si une transaction n'est pas écrite dans le journal binaire tant qu'elle n'est pas validée. En supposant que la table est transactionnelle, toutes les instructions de la transaction sont regroupées dans une instruction BEGIN \ COMMIT.

0

Selon this, les esclaves ne peuvent voir les modifications qu'après la validation de la transaction.

Les transactions qui échouent sur le maître n'affectent pas du tout la réplication. La réplication MySQL est basée sur le journal binaire où MySQL écrit des instructions SQL qui modifient les données. Une transaction qui échoue (par exemple, en raison d'une violation de clé étrangère ou parce qu'elle est annulée) n'est pas écrite dans le journal binaire, elle n'est donc pas envoyée aux esclaves.

Et this confirme:

Le journal binaire est plantage de sécurité. Seuls les événements complets ou les transactions sont consignés ou relus.

Questions connexes