DBAtlas · Atlas d'exploitation des bases de données

1785: Statement violates GTID consistency (l'instruction viole la cohérence GTID)

MySQL

Que signifie cette erreur ?

Avec la réplication basée sur les GTID (Global Transaction Identifier) activée, l'instruction exécutée viole les règles de cohérence GTID. Le mode GTID n'autorise pas certains types d'instructions qui ne peuvent pas être affectés en toute sécurité à un seul GTID.

Cause

1785 (ER_GTID_UNSAFE_NON_TRANSACTIONAL_TABLE) se produit précisément lorsque des tables non transactionnelles (par ex. MyISAM) sont mises à jour dans la même transaction que des tables transactionnelles (InnoDB), ou dans une transaction multi-instructions sans autocommit. Dans les anciennes versions, CREATE TABLE ... SELECT (avant 8.0.21 ; autorisé en 8.0.21+ pour les moteurs prenant en charge le DDL atomique) et CREATE/DROP TEMPORARY TABLE dans une transaction (avant 8.0.13 ; autorisé en 8.0.13+ lorsque binlog_format vaut ROW/MIXED) violent aussi la cohérence GTID (ils sont signalés avec des codes d'erreur distincts). Ils sont refusés lorsque enforce_gtid_consistency=ON.

Comment la corriger

Ne mélangez pas des tables de moteurs non transactionnels avec des tables transactionnelles dans la même transaction ; mettez à jour les tables MyISAM par des instructions uniques en autocommit ou passez toutes les tables en InnoDB : ALTER TABLE my_table ENGINE=InnoDB; Dans les anciennes versions (avant 8.0.21), scindez CREATE TABLE ... SELECT en deux étapes (CREATE TABLE, puis INSERT ... SELECT) ; avant 8.0.13, créez et supprimez les tables temporaires en dehors d'une transaction explicite.

Ouvrir dans DBAtlas →

Autres entrées pour ce moteur