DBAtlas · Атлас эксплуатации баз данных

1592: ER_BINLOG_UNSAFE_STATEMENT: Unsafe statement written to the binary log

MySQL

Что это значит?

При использовании формата binlog на основе операторов (STATEMENT) был выполнен оператор с недетерминированным результатом (способный дать другой результат на реплике). MySQL выдаёт предупреждение при записи его в binlog, так как есть риск расхождения данных между source и репликой.

Почему возникает?

При binlog_format=STATEMENT: недетерминированные функции, такие как UUID(), SYSDATE() или USER() (NOW() реплицируется безопасно при STATEMENT), UPDATE/DELETE с LIMIT, но без ORDER BY, INSERT в сочетании с AUTO_INCREMENT или некоторые пользовательские/системные функции. Эти операторы могут давать разные результаты на разных серверах.

Как исправить

Переключите формат binlog на построчный (рекомендуется; ROW используется по умолчанию начиная с MySQL 5.7.7): binlog_format=ROW в my.cnf или SET PERSIST binlog_format = ROW; (переменная binlog_format устарела начиная с 8.0.34; изменение вступает в силу для новых сеансов). Формат ROW безопасно реплицирует недетерминированные операторы. Если необходимо остаться на STATEMENT, замените недетерминированные функции/выражения константами и добавьте детерминированный ORDER BY в DML с LIMIT.

Открыть в DBAtlas →

Ещё по этой СУБД