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.
Más entradas de este motor
- 1267Illegal mix of collations
- 1030Got error N from storage engine
- 1197Multi-statement transaction required more than 'max_binlog_cache_size' (la transacción de varias sentencias requirió más que 'max_binlog_cache_size')
- 3024Query execution was interrupted, maximum statement execution time exceeded (ejecución de la consulta interrumpida; se superó el tiempo máximo de ejecución)
- 1298Unknown or incorrect time zone
- 1418Function has none of DETERMINISTIC, NO SQL, or READS SQL DATA (binary logging enabled) (la función no tiene DETERMINISTIC, NO SQL ni READS SQL DATA)
- 1231Variable can't be set to the value of ... (no se puede asignar ese valor a la variable)