DBAtlas · Veritabanı operasyon atlası

1592: ER_BINLOG_UNSAFE_STATEMENT: Unsafe statement written to the binary log

MySQL

Ne demek?

STATEMENT tabanlı binlog formatı kullanılırken, sonucu deterministik olmayan (replikada farklı sonuç üretebilecek) bir ifade çalıştırıldı. MySQL bunu binlog'a yazarken uyarı verir; çünkü kaynak ve replika arasında veri tutarsızlığı riski vardır.

Neden olur?

binlog_format=STATEMENT iken UUID(), SYSDATE(), USER() gibi deterministik olmayan fonksiyonlar (NOW() ise STATEMENT'ta güvenle çoğaltılır), LIMIT'li ORDER BY olmayan UPDATE/DELETE, AUTO_INCREMENT ile karışık INSERT, ya da bazı kullanıcı tanımlı/sistem fonksiyonlarını kullanmak. Bu ifadeler her sunucuda aynı sonucu vermeyebilir.

Nasıl çözülür?

Binlog formatını satır tabanlıya çevirin (önerilen; MySQL 5.7.7'den beri varsayılan ROW'dur): my.cnf'de binlog_format=ROW ya da SET PERSIST binlog_format = ROW; (binlog_format değişkeni 8.0.34'ten beri deprecated'dır; değişiklik yeni oturumlarda geçerli olur). ROW formatı deterministik olmayan ifadeleri güvenle çoğaltır. STATEMENT'ta kalmanız gerekiyorsa deterministik olmayan fonksiyon/ifadeleri sabit değerlerle değiştirin ve LIMIT'li DML'lere belirleyici ORDER BY ekleyin.

DBAtlas'ta aç →

Aynı motorda diğer kayıtlar