DBAtlas · Atlas de operações de banco de dados

1592: ER_BINLOG_UNSAFE_STATEMENT: Unsafe statement written to the binary log (comando inseguro gravado no binary log)

MySQL

O que significa?

Com o formato de binlog baseado em STATEMENT, foi executado um comando com resultado não determinístico (que poderia produzir um resultado diferente na réplica). O MySQL emite um aviso ao gravá-lo no binlog porque há risco de inconsistência de dados entre source e réplica.

Por que acontece?

Com binlog_format=STATEMENT: funções não determinísticas como UUID(), SYSDATE() ou USER() (NOW() é replicado com segurança em STATEMENT), UPDATE/DELETE com LIMIT mas sem ORDER BY, INSERTs combinados com AUTO_INCREMENT ou determinadas funções definidas pelo usuário/do sistema. Esses comandos podem não produzir o mesmo resultado em todos os servidores.

Como resolver

Mude o formato do binlog para baseado em linhas (recomendado; ROW é o padrão desde o MySQL 5.7.7): binlog_format=ROW no my.cnf ou SET PERSIST binlog_format = ROW; (a variável binlog_format está obsoleta desde a 8.0.34; a alteração vale para novas sessões). O formato ROW replica com segurança comandos não determinísticos. Se precisar continuar em STATEMENT, substitua funções/expressões não determinísticas por valores constantes e adicione um ORDER BY determinístico às DMLs com LIMIT.

Abrir no DBAtlas →

Mais entradas deste banco