1785: Statement violates GTID consistency (l'instruction viole la cohérence GTID)
MySQLQue 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.
Autres entrées pour ce moteur
- 1267Illegal mix of collations
- 1030Got error N from storage engine
- 1197Multi-statement transaction required more than 'max_binlog_cache_size' (la transaction multi-instructions a nécessité plus que 'max_binlog_cache_size')
- 3024Query execution was interrupted, maximum statement execution time exceeded (exécution de la requête interrompue : durée maximale d'exécution dépassée)
- 1298Unknown or incorrect time zone
- 1418Function has none of DETERMINISTIC, NO SQL, or READS SQL DATA (binary logging enabled) (la fonction n'a ni DETERMINISTIC, ni NO SQL, ni READS SQL DATA ; journalisation binaire activée)
- 1231Variable can't be set to the value of ...