1592: ER_BINLOG_UNSAFE_STATEMENT: Unsafe statement written to the binary log (instruction non sûre écrite dans le binary log)
MySQLQue 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.
Autres entrées pour ce moteur
- 3819ER_CHECK_CONSTRAINT_VIOLATED: Check constraint is violated (contrainte CHECK violée)
- 1118ER_TOO_BIG_ROWSIZE: Row size too large (taille de ligne trop grande)
- 1170ER_BLOB_KEY_WITHOUT_LENGTH: BLOB/TEXT column used in key specification without a key length (colonne BLOB/TEXT utilisée dans une clé sans longueur de clé)
- 3140ER_INVALID_JSON_TEXT: Invalid JSON text (texte JSON invalide)
- 1526ER_NO_PARTITION_FOR_GIVEN_VALUE: Table has no partition for value (aucune partition de la table pour cette valeur)
- 1049Unknown database 'name'
- 1364Field 'name' doesn't have a default value (le champ 'name' n'a pas de valeur par défaut)