Транзакции и Master + Slave Replication - PullRequest
5 голосов
/ 07 августа 2011

Я пытаюсь прояснить ситуацию.У меня есть настройки master + slaves.У меня есть один хозяин и 3 раба.Все записи (INSERT|UPDATE|DELETE) идут мастеру.Все чтения (SELECT) переходят к одному из рабов, который выбирается случайным образом.Все мои таблицы используют механизм хранения InnoDB.

Мне любопытно, как MySQL / InnoDB обрабатывает транзакции в этой настройке.Если MySQL записывает каждое изменение в транзакции в binlog, то все должно быть в порядке.Однако я могу видеть некоторые большие проблемы, если binlog не записывается до тех пор, пока транзакция не будет зафиксирована.

Может кто-нибудь объяснить, что происходит в MySQL во время транзакции с репликацией?

Ответы [ 2 ]

1 голос
/ 16 марта 2016

Согласно этому ведомые могут видеть изменения только после совершения транзакции.

Транзакции, которые не выполняются на главном устройстве, вообще не влияют на репликацию.Репликация MySQL основана на двоичном журнале, где MySQL записывает операторы SQL, которые изменяют данные.Неудачная транзакция (например, из-за нарушения внешнего ключа или из-за отката) не записывается в двоичный журнал, поэтому она не отправляется ведомым.

И this подтверждает:

Бинарный журнал защищен от сбоев.Только полные события или транзакции регистрируются или читаются обратно.

1 голос
/ 07 сентября 2011

Обычно, если транзакция не записывается в двоичный журнал, пока она не будет зафиксирована. Предполагая, что таблица является транзакционной, все операторы в транзакции сгруппированы в один оператор BEGIN \ COMMIT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...