Версия MySQL: 5.5.13
Если я установил формат binlog на STATEMENT
, Я получил следующие предупреждения на Мастере:
[Предупреждение] Небезопасный оператор записан в двоичный журнал с использованием формата оператора, поскольку BINLOG_FORMAT = STATEMENT. Оператор небезопасен, потому что он использует системную функцию, которая может возвращать другое значение на ведомом устройстве ...
Я также прочитал об ограничениях процедур и функций репликации хранилищ: http://dev.mysql.com/doc/refman/5.5/en/stored-programs-logging.html
Но если я перейду на MIXED
, mysqld.log
на рабе показывает:
[Предупреждение] Slave SQL: не удалось выполнить событие Update_rows для таблицы hdcn.sessions; Не удается найти запись в «сессиях», Error_code: 1032; ошибка обработчика HA_ERR_KEY_NOT_FOUND; главный журнал событий mysql-bin.003834, end_log_pos 602692401, Error_code: 1032
[Предупреждение] Slave SQL: не удалось выполнить событие Delete_rows для таблицы Reportingdb.102_rpt_clickview; Не удается найти запись в «102_rpt_clickview», код ошибки: 1032; ошибка обработчика HA_ERR_END_OF_FILE; главный журнал событий mysql-bin.003834, end_log_pos 725203511, Error_code: 1032
Похоже на MIXED
Формат binlog приводит к тому, что Мастер не полностью реплицируется на Slave.
Я снова переключился на STATEMENT
формат. Могу ли я игнорировать небезопасные предупреждения?
Я предполагаю, что вы сделали это на одной установке, не очищая ведомое устройство и не настраивая его с нуля.
Как сообщает сообщение об ошибке для репликации на основе операторов, ваше приложение использовало некоторые команды, которые не могут быть реплицированы с помощью репликации на основе операторов. Примером может служить запрос типа
INSERT INTO t (t) VALUES(NOW())
где NOW()
вернет разные значения при выполнении на ведущем и ведомом.
Таким образом у вас будут разные данные на главном и подчиненном устройстве. Это плохо, поскольку в зависимости от вашего ведомого устройства ваши клиенты будут читать разные данные, а последующие записи изменят другие данные, поэтому вы получите данные, которые будут еще более разными.
Теперь вы переключаетесь на смешанную репликацию, при которой для некоторых операторов может использоваться построчная репликация. С RBR вам действительно нужны точно такие же данные, поскольку ему сложно идентифицировать строки, которые были изменены, и обновлять их.
Итак, что нужно сделать? - Настройте ведущее устройство для использования смешанного ведения журнала, а затем настройте ведомое устройство с использованием согласованного снимка.
Вы должны исключить все возможности вставок, обновлений, открытых временных таблиц и т. Д.
stop slave; flush tables with read lock;
flush tables with read lock; set global binlog_format='MIXED'; unlock tables;
unlock tables; start slave;