Ошибка MySQL: невозможно записать в двоичный журнал

У меня есть система (унаследованная от другой компании-разработчика), и я пока не знаю всех ее функций. Строительство:
- веб-клиент /приложение (symfony 1.4)
- DB - MySQL.

Проект развертывается на двух серверах:
1-й: nginx-сервер + PHP + DB-мастер;
2-й: DB Slave.

Когда данные модифицируются веб-клиентом в DB Master, DB Slave работает хорошо, а данные имеют нормальный процесс репликации. Когда данные модифицируются клиентом управления MySQL, у меня есть уведомление:

  

Невозможно выполнить оператор: невозможно записать в двоичный журнал, поскольку   BINLOG_FORMAT = ЗАЯВЛЕНИЕ и по крайней мере одна таблица использует механизм хранения   ограниченный регистрацией на основе строк. InnoDB ограничен регистрацией строк, когда   уровень изоляции транзакции READ COMMITTED или READ UNCOMMITTED

И затем, DB Slave падает, а процесс репликации прерывается (вставка ошибки ... дублирует запись ...).

Аналогичное уведомление происходит (в этой ситуации - ошибка) с тем же текстом, когда я пытаюсь вставить данные с помощью java-приложения /модуля (он выполняется внутри транзакции), а после исключения транзакция откатывается и никаких изменений не происходит.

Как я могу решить эту проблему и сделать работу системы и сделать возможной модификацию данных в DB Master и DB Slaves в нормальном режиме?

6 голосов | спросил Chaki_Black 7 FebruaryEurope/MoscowbFri, 07 Feb 2014 19:14:38 +0400000000pmFri, 07 Feb 2014 19:14:38 +040014 2014, 19:14:38

1 ответ


13

Существует 3 метода, которые MySQL может использовать для записи в двоичные журналы:

  1. О

    Это означает, что каждый оператор SQL на главном записывается в журнал и выполняется на подчиненном устройстве. Это может вызвать проблемы, если инструкция SQL содержит такие выражения, как «NOW ()», «RAND ()» и все, что не является детерминированным. Это также требует поддержки от используемого механизма хранения.

  2. СТРОКА

    Это означает, что каждая строка, которая изменяется оператором, записывается отдельно в двоичном журнале. Это дает большие двоичные журналы (обычно), чем ведение журнала на основе инструкций, но почти всегда гарантированно дает точную репликацию.

  3. MIXED

    Это позволяет MySQL выбирать между бинарным и строковым протоколированием по мере необходимости.

Если вы получаете эту ошибку, одно предложение - изменить переменную BINLOG_FORMAT на MIXED. Это позволяет MySQL автоматически переключаться между протоколами ROW и STATEMENT, если требуется.

ответил Phil Sumner 7 FebruaryEurope/MoscowbFri, 07 Feb 2014 19:31:38 +0400000000pmFri, 07 Feb 2014 19:31:38 +040014 2014, 19:31:38

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132