DBAtlas · Atlas für Datenbankbetrieb

1592: ER_BINLOG_UNSAFE_STATEMENT: Unsafe statement written to the binary log

MySQL

Was bedeutet das?

Bei Verwendung des STATEMENT-basierten Binlog-Formats wurde eine Anweisung mit nichtdeterministischem Ergebnis ausgeführt (die auf der Replica ein anderes Ergebnis liefern könnte). MySQL gibt beim Schreiben ins Binlog eine Warnung aus, weil das Risiko einer Dateninkonsistenz zwischen Source und Replica besteht.

Ursache

Mit binlog_format=STATEMENT: nichtdeterministische Funktionen wie UUID(), SYSDATE() oder USER() (NOW() wird mit STATEMENT sicher repliziert), UPDATE/DELETE mit LIMIT, aber ohne ORDER BY, mit AUTO_INCREMENT gemischte INSERTs oder bestimmte benutzerdefinierte/Systemfunktionen. Diese Anweisungen liefern nicht zwingend auf jedem Server dasselbe Ergebnis.

Lösung

Stelle das Binlog-Format auf zeilenbasiert um (empfohlen; ROW ist seit MySQL 5.7.7 der Standard): binlog_format=ROW in my.cnf oder SET PERSIST binlog_format = ROW; (die Variable binlog_format ist seit 8.0.34 veraltet; die Änderung gilt für neue Sessions). Das ROW-Format repliziert nichtdeterministische Anweisungen sicher. Musst du bei STATEMENT bleiben, ersetze nichtdeterministische Funktionen/Ausdrücke durch konstante Werte und ergänze DML mit LIMIT um ein deterministisches ORDER BY.

In DBAtlas öffnen →

Weitere Einträge zu dieser Datenbank