1592: ER_BINLOG_UNSAFE_STATEMENT: Unsafe statement written to the binary log
MySQLNe 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.
Aynı motorda diğer kayıtlar
- 3819ER_CHECK_CONSTRAINT_VIOLATED: Check constraint is violated
- 1118ER_TOO_BIG_ROWSIZE: Row size too large
- 1170ER_BLOB_KEY_WITHOUT_LENGTH: BLOB/TEXT column used in key specification without a key length
- 3140ER_INVALID_JSON_TEXT: Invalid JSON text
- 1526ER_NO_PARTITION_FOR_GIVEN_VALUE: Table has no partition for value
- 1049Unknown database 'name'
- 1364Field 'name' doesn't have a default value