DBAtlas · Atlas de operaciones de bases de datos

1785: Statement violates GTID consistency

MySQL

¿Qué significa?

Con la replicación basada en GTID (Global Transaction Identifier) habilitada, la sentencia ejecutada infringe las reglas de consistencia de GTID. El modo GTID no permite ciertos tipos de sentencias que no pueden asignarse de forma segura a un único GTID.

¿Por qué ocurre?

1785 (ER_GTID_UNSAFE_NON_TRANSACTIONAL_TABLE) se produce concretamente cuando se actualizan tablas no transaccionales (p. ej., MyISAM) en la misma transacción que tablas transaccionales (InnoDB), o en una transacción de varias sentencias sin autocommit. En versiones antiguas, CREATE TABLE ... SELECT (antes de 8.0.21; permitido en 8.0.21+ para motores que admiten DDL atómico) y CREATE/DROP TEMPORARY TABLE dentro de una transacción (antes de 8.0.13; permitido en 8.0.13+ cuando binlog_format es ROW/MIXED) también infringen la consistencia de GTID (se informan con códigos de error distintos). Se rechazan cuando enforce_gtid_consistency=ON.

Cómo solucionarlo

No mezcle tablas de motores no transaccionales con tablas transaccionales en la misma transacción; actualice las tablas MyISAM con sentencias únicas en autocommit o pase todas las tablas a InnoDB: ALTER TABLE my_table ENGINE=InnoDB; En versiones antiguas (antes de 8.0.21), divida CREATE TABLE ... SELECT en dos pasos (CREATE TABLE y después INSERT ... SELECT); antes de 8.0.13, cree y elimine las tablas temporales fuera de una transacción explícita.

Abrir en DBAtlas →

Más entradas de este motor