1785: Statement violates GTID consistency
MySQLO que significa?
Com a replicação baseada em GTID (Global Transaction Identifier) habilitada, o comando executado viola as regras de consistência de GTID. O modo GTID não permite certos tipos de comando que não podem ser atribuídos com segurança a um único GTID.
Por que acontece?
O 1785 (ER_GTID_UNSAFE_NON_TRANSACTIONAL_TABLE) ocorre especificamente quando tabelas não transacionais (por exemplo, MyISAM) são atualizadas na mesma transação que tabelas transacionais (InnoDB), ou em uma transação com vários comandos sem autocommit. Em versões mais antigas, CREATE TABLE ... SELECT (antes da 8.0.21; permitido na 8.0.21+ para engines com suporte a DDL atômico) e CREATE/DROP TEMPORARY TABLE dentro de uma transação (antes da 8.0.13; permitido na 8.0.13+ quando binlog_format é ROW/MIXED) também violam a consistência de GTID (esses casos são informados com códigos de erro separados). Eles são rejeitados quando enforce_gtid_consistency=ON.
Como resolver
Não misture tabelas de engines não transacionais com tabelas transacionais na mesma transação; atualize tabelas MyISAM com comandos únicos em autocommit ou mova todas as tabelas para InnoDB: ALTER TABLE my_table ENGINE=InnoDB; Em versões mais antigas (antes da 8.0.21), divida CREATE TABLE ... SELECT em duas etapas (CREATE TABLE e depois INSERT ... SELECT); antes da 8.0.13, crie e remova tabelas temporárias fora de uma transação explícita.
Mais entradas deste banco
- 1267Illegal mix of collations
- 1030Got error N from storage engine
- 1197Multi-statement transaction required more than 'max_binlog_cache_size' (a transação com vários comandos exigiu mais que 'max_binlog_cache_size')
- 3024Query execution was interrupted, maximum statement execution time exceeded (execução da consulta interrompida; tempo máximo de execução excedido)
- 1298Unknown or incorrect time zone
- 1418Function has none of DETERMINISTIC, NO SQL, or READS SQL DATA (binary logging enabled) (a função não tem DETERMINISTIC, NO SQL nem READS SQL DATA)
- 1231Variable can't be set to the value of ... (não é possível atribuir esse valor à variável)