1785: Statement violates GTID consistency
MySQLNe demek?
GTID (Global Transaction Identifier) tabanlı replikasyon etkinken, çalıştırılan ifade GTID tutarlılık kurallarını ihlal ediyor. GTID modu, tek bir GTID'ye güvenli biçimde atanamayacak belirli ifade türlerine izin vermez.
Neden olur?
1785 (ER_GTID_UNSAFE_NON_TRANSACTIONAL_TABLE) özellikle transactional olmayan (ör. MyISAM) tabloların, transactional (InnoDB) tablolarla aynı transaction'da veya autocommit dışı çok ifadeli bir transaction'da güncellenmesiyle oluşur. Eski sürümlerde ayrıca CREATE TABLE ... SELECT (8.0.21 öncesi; 8.0.21+'da atomik DDL destekleyen motorlarda serbest) ve transaction içinde CREATE/DROP TEMPORARY TABLE (8.0.13 öncesi; 8.0.13+'da binlog_format ROW/MIXED iken serbest) GTID tutarlılığını ihlal eder (bunlar ayrı hata kodlarıyla raporlanır). enforce_gtid_consistency=ON iken reddedilir.
Nasıl çözülür?
Transactional olmayan motor tablolarını transactional tablolarla aynı transaction'da karıştırmayın; MyISAM tablolarını autocommit'li tekil ifadelerle güncelleyin ya da tüm tabloları InnoDB'ye taşıyın: ALTER TABLE tablo ENGINE=InnoDB; Eski sürümlerde (8.0.21 öncesi) CREATE TABLE ... SELECT'i iki adıma bölün (CREATE TABLE, ardından INSERT ... SELECT); 8.0.13 öncesinde geçici tabloları açık transaction dışında oluşturup bırakın.
Aynı motorda diğer kayıtlar
- 1267Illegal mix of collations
- 1030Got error N from storage engine
- 1197Multi-statement transaction required more than 'max_binlog_cache_size'
- 3024Query execution was interrupted, maximum statement execution time exceeded
- 1298Unknown or incorrect time zone
- 1418Function has none of DETERMINISTIC, NO SQL, or READS SQL DATA (binary logging enabled)
- 1231Variable can't be set to the value of ...