DBAtlas · Atlas de operações de banco de dados

1785: Statement violates GTID consistency

MySQL

O 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.

Abrir no DBAtlas →

Mais entradas deste banco