DBAtlas · Veritabanı operasyon atlası

1785: Statement violates GTID consistency

MySQL

Ne 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.

DBAtlas'ta aç →

Aynı motorda diğer kayıtlar