параметр sync_binlog

Я просматривал документацию по параметру sync_binlog и обнаружил несоответствие в документации по параметру sync_binlog.

Документация здесь http://dev.mysql.com/doc/refman/5.6/en/replication-options-binary-log.html#sysvar_sync_binlog говорит:

Наиболее безопасным выбором является значение 1, поскольку в случае сбоя вы потеряете не более одной группы фиксации из двоичного журнала.

По сути, это означает, что данные будут обновляться, но могут отсутствовать в бинарных журналах.

Однако в документации по двоичному журналу здесь http://dev.mysql.com/doc/refman/5.6/en/binary-log.html говорит:

Например, если вы используете таблицы InnoDB и сервер MySQL обрабатывает оператор COMMIT, он последовательно записывает множество подготовленных транзакций в двоичный журнал, синхронизирует двоичный журнал, а затем фиксирует эту транзакцию в InnoDB. Если сервер выходит из строя между этими двумя операциями, транзакция откатывается InnoDB при перезапуске, но все еще существует в двоичном журнале.

По сути, это означает, что транзакция сначала записывается в бинлог, а затем фиксируется в InnoDB, поэтому есть вероятность, что в случае сбоя строка будет в бинлоге, но не существует в базе данных.

Я задал этот вопрос на форуме MySQL и жду ответа, но был бы очень признателен, если бы кто-то, кто использовал этот параметр, мог предоставить подробную информацию о том, какое из следующих двух действий является правильным?


person Ashu    schedule 07.09.2016    source источник


Ответы (1)


Синхронизация на самом сервере отличается от синхронизации с ведомыми устройствами в настройке репликации.

Бинлог (следовательно, не sync_binlog, а "групповая фиксация") не используется в целостности таблиц InnoDB на Мастере. Однако, как вы заметили, он задействован.

Упомянутый вами сбой произойдет после того, как журналы будут записаны на локальный компьютер, поэтому локальный компьютер (если он вернется) может восстановиться. Но «групповой коммит» может не дойти до рабов. Даже если он попадает в бинлог, это не гарантирует, что какой-либо ведомый (тем более, все ведомые) уже получил значение.

См. также «полусинхронную» репликацию, при которой по крайней мере одно ведомое устройство должно подтвердить, прежде чем будет подтверждено COMMIT.

Вы процитировали что-то, что подразумевает, что транзакция может попасть на ведомое устройство, но может быть отброшена на ведущем. Я думаю, что в этом случае есть открытая ошибка.

GTID также запутывают проблему. Возможно, некоторые цитаты, которые вы сделали до GTID, нуждаются в обновлении.

Сообщите об этом на странице http://bugs.mysql.com .

person Rick James    schedule 07.09.2016
comment
Я понимаю, что запуск mysql в полусинхронном режиме гарантирует, что фиксация будет записана в журналы бинов одного из ведомых устройств, однако здесь меня больше беспокоит настройка sync_binlog=1 в mysql, я хотел знать, какую гарантию он может дать в случае сбоя, будет ли это то, что он записывает в журнал bin, но не фиксирует в Master DB, или может быть, что он фиксирует в masterDB, но не записывает в журналы bin . Документация сама по себе содержит противоречивые утверждения, я зарегистрировал ошибку по этому поводу: bugs.mysql. com/bug.php?id=82900 . Спасибо за информацию. - person Ashu; 08.09.2016