1592: ER_BINLOG_UNSAFE_STATEMENT: Unsafe statement written to the binary log (comando inseguro gravado no binary log)
MySQLO 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.
Mais entradas deste banco
- 3819ER_CHECK_CONSTRAINT_VIOLATED: Check constraint is violated (a constraint CHECK foi violada)
- 1118ER_TOO_BIG_ROWSIZE: Row size too large
- 1170ER_BLOB_KEY_WITHOUT_LENGTH: BLOB/TEXT column used in key specification without a key length (coluna BLOB/TEXT usada em uma chave sem comprimento de chave)
- 3140ER_INVALID_JSON_TEXT: Invalid JSON text
- 1526ER_NO_PARTITION_FOR_GIVEN_VALUE: Table has no partition for value (a tabela não tem nenhuma partição para o valor)
- 1049Unknown database 'name'
- 1364Field 'name' doesn't have a default value (o campo não tem valor padrão)