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.
Ещё по этой СУБД
- 3819ER_CHECK_CONSTRAINT_VIOLATED: Check constraint is violated
- 1118ER_TOO_BIG_ROWSIZE: Row size too large
- 1170ER_BLOB_KEY_WITHOUT_LENGTH: BLOB/TEXT column used in key specification without a key length
- 3140ER_INVALID_JSON_TEXT: Invalid JSON text
- 1526ER_NO_PARTITION_FOR_GIVEN_VALUE: Table has no partition for value
- 1049Unknown database 'name'
- 1364Field 'name' doesn't have a default value