1785: Statement violates GTID consistency
MySQLWas 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.
Weitere Einträge zu dieser Datenbank
- 1267Illegal mix of collations
- 1030Got error N from storage engine
- 1197Multi-statement transaction required more than 'max_binlog_cache_size'
- 3024Query execution was interrupted, maximum statement execution time exceeded
- 1298Unknown or incorrect time zone
- 1418Function has none of DETERMINISTIC, NO SQL, or READS SQL DATA (Binary Logging aktiviert)
- 1231Variable can't be set to the value of ...