1785: Statement violates GTID consistency
MySQLЧто это значит?
При включённой репликации на основе GTID (Global Transaction Identifier) выполненный оператор нарушает правила согласованности GTID. Режим GTID не допускает некоторых типов операторов, которые невозможно безопасно назначить одному GTID.
Почему возникает?
1785 (ER_GTID_UNSAFE_NON_TRANSACTIONAL_TABLE) возникает именно тогда, когда нетранзакционные таблицы (например, MyISAM) обновляются в той же транзакции, что и транзакционные (InnoDB), или в многооператорной транзакции без autocommit. В старых версиях согласованность GTID также нарушают CREATE TABLE ... SELECT (до 8.0.21; в 8.0.21+ разрешено для движков с поддержкой атомарного DDL) и CREATE/DROP TEMPORARY TABLE внутри транзакции (до 8.0.13; в 8.0.13+ разрешено при binlog_format ROW/MIXED) (о них сообщается отдельными кодами ошибок). Они отклоняются при enforce_gtid_consistency=ON.
Как исправить
Не смешивайте таблицы нетранзакционных движков с транзакционными таблицами в одной транзакции; обновляйте таблицы MyISAM одиночными операторами в режиме autocommit или переведите все таблицы на InnoDB: ALTER TABLE my_table ENGINE=InnoDB; В старых версиях (до 8.0.21) разбейте CREATE TABLE ... SELECT на два шага (CREATE TABLE, затем INSERT ... SELECT); до 8.0.13 создавайте и удаляйте временные таблицы вне явной транзакции.
Ещё по этой СУБД
- 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 enabled)
- 1231Variable can't be set to the value of ...