Из-за следующего предупреждения в mysqld.log
:
[Предупреждение] Небезопасный оператор записывается в двоичный журнал с использованием формата оператора, поскольку BINLOG_FORMAT = STATEMENT. Оператор небезопасен, потому что он использует предложение LIMIT. Это небезопасно, поскольку набор включенных строк не может быть предсказан.
Я хочу переключить формат репликации на MIXED
.
Но согласно документу MySQL:
Переключение формата репликации во время выполнения не рекомендуется при наличии каких-либо временных таблиц, поскольку временные таблицы регистрируются только при использовании репликации на основе операторов, тогда как при репликации на основе строк они не регистрируются.
Итак, вопрос в том, как определить, существуют ли временные таблицы для безопасного переключения двоичного формата журнала?
источник
Ответы:
Поскольку binlog будет иметь определенный формат в тот момент, когда вы это сделаете, вы можете решить не играть вместе с этими двумя форматами, хотя MySQL (например, Oracle [все еще не может откатить мой язык]) создал эту функцию.
Для полной безопасности без перезапуска MySQL попробуйте следующее:
Это оставит последний binlog в формате «MIXED». Существует предпоследний (следующий за последним) бинлог, который просто закрывает последний бинлог, который был в предыдущем формате.
Все существующие сеансы до первого
FLUSH LOGS;
начнут записываться в последний binlog, как толькоUNLOCK TABLES;
будут выполнены.Попробуйте!
ПРЕДОСТЕРЕЖЕНИЕ
Давая кредит, где кредит должен, мой ответ действительно совмещает с ответом @ Джонатана . Я просто закрываю и открываю журналы поверх этого. Он получает +1 за то, что вывел это первым.
ОБНОВЛЕНИЕ 2011-10-12 13:58 ПО ВОСТОЧНОМУ ВРЕМЕНИ
Если вы делаете это с активным Мастером, и есть один или несколько подчиненных, реплицирующих с этого Мастера, вам также следует позаботиться о том, чтобы журналы ретрансляции были в новом формате. Вот что вы можете сделать:
На Рабе беги
STOP SLAVE;
На Мастере запустите эти:
На Рабе беги
START SLAVE;
Запуск
STOP SLAVE;
иSTART SLAVE;
вращение журналов ретрансляции и вызывает репликацию новых записей в зависимости от формата. Вы можете также применить изменение binlog_format в подчиненном устройстве.источник
Для переключения binlog_format во время выполнения вы можете сделать:
Это установит все НОВЫЕ сеансы в смешанный формат binlog. Все существующие сеансы будут такими, какие были установлены ранее, до их окончания.
Вы также можете сделать это
set session binlog_format = 'MIXED';
вручную, чтобы решить любые проблемы со сессией специально.источник