DBAtlas · Atlas für Datenbankbetrieb

1785: Statement violates GTID consistency

MySQL

Was bedeutet das?

Bei aktivierter GTID-basierter Replikation (Global Transaction Identifier) verletzt die ausgeführte Anweisung die GTID-Konsistenzregeln. Der GTID-Modus erlaubt bestimmte Anweisungstypen nicht, die sich nicht sicher einer einzelnen GTID zuordnen lassen.

Ursache

1785 (ER_GTID_UNSAFE_NON_TRANSACTIONAL_TABLE) tritt speziell auf, wenn nicht transaktionale Tabellen (z. B. MyISAM) in derselben Transaktion wie transaktionale Tabellen (InnoDB) oder in einer Multi-Statement-Transaktion ohne Autocommit aktualisiert werden. In älteren Versionen verletzen auch CREATE TABLE ... SELECT (vor 8.0.21; ab 8.0.21 für Engines mit atomarer DDL erlaubt) und CREATE/DROP TEMPORARY TABLE innerhalb einer Transaktion (vor 8.0.13; ab 8.0.13 erlaubt, wenn binlog_format ROW/MIXED ist) die GTID-Konsistenz (diese werden mit eigenen Fehlercodes gemeldet). Bei enforce_gtid_consistency=ON werden sie abgelehnt.

Lösung

Mische Tabellen nicht transaktionaler Engines nicht mit transaktionalen Tabellen in derselben Transaktion; aktualisiere MyISAM-Tabellen mit einzelnen Autocommit-Anweisungen oder migriere alle Tabellen nach InnoDB: ALTER TABLE my_table ENGINE=InnoDB; Teile in älteren Versionen (vor 8.0.21) CREATE TABLE ... SELECT in zwei Schritte auf (CREATE TABLE, dann INSERT ... SELECT); lege temporäre Tabellen vor 8.0.13 außerhalb einer expliziten Transaktion an und lösche sie dort.

In DBAtlas öffnen →

Weitere Einträge zu dieser Datenbank