DBAtlas · Atlas d'exploitation des bases de données

1592: ER_BINLOG_UNSAFE_STATEMENT: Unsafe statement written to the binary log (instruction non sûre écrite dans le binary log)

MySQL

Que signifie cette erreur ?

Avec le format de binlog STATEMENT, une instruction au résultat non déterministe (pouvant produire un résultat différent sur le réplica) a été exécutée. MySQL émet un avertissement en l'écrivant dans le binlog car il existe un risque d'incohérence des données entre la source et le réplica.

Cause

Avec binlog_format=STATEMENT : fonctions non déterministes telles que UUID(), SYSDATE() ou USER() (NOW() se réplique sans risque en STATEMENT), UPDATE/DELETE avec LIMIT mais sans ORDER BY, INSERT combinés à AUTO_INCREMENT, ou certaines fonctions définies par l'utilisateur/système. Ces instructions peuvent ne pas produire le même résultat sur chaque serveur.

Comment la corriger

Passez le format de binlog en mode ligne (recommandé ; ROW est la valeur par défaut depuis MySQL 5.7.7) : binlog_format=ROW dans my.cnf ou SET PERSIST binlog_format = ROW; (la variable binlog_format est dépréciée depuis 8.0.34 ; la modification s'applique aux nouvelles sessions). Le format ROW réplique sans risque les instructions non déterministes. Si vous devez rester en STATEMENT, remplacez les fonctions/expressions non déterministes par des valeurs constantes et ajoutez un ORDER BY déterministe au DML avec LIMIT.

Ouvrir dans DBAtlas →

Autres entrées pour ce moteur