Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Kode Peringatan Mysql 1592 Pernyataan tidak aman ditulis ke log biner menggunakan format pernyataan

Anda mungkin sudah familiar dengan dua format logging biner , berbasis pernyataan -- yang mencatat kueri aktual yang mengubah data pada master sehingga dapat dieksekusi pada budak, dan berbasis baris -- yang mencatat sebelum dan/atau sesudah gambar dari data baris aktual yang diubah oleh kueri, sehingga slave dapat langsung menerapkan perubahan tersebut ke datanya... dan mode campuran, di mana pengoptimal dan mesin penyimpanan menentukan format mana yang merupakan format optimal berdasarkan kueri demi kueri.

Pernyataan yang Anda jalankan tidak aman pada prinsipnya karena Anda menggunakan INSERT ... SELECT ke dalam tabel dengan kolom kenaikan otomatis. Jika kueri dari bentuk umum itu digunakan dalam STATEMENT -lingkungan berbasis, dan SELECT tidak mengembalikan baris dalam urutan yang sama pada master dan slave, baris dapat dipilih dalam urutan yang berbeda, dan dengan demikian berakhir dengan nilai kenaikan otomatis yang berbeda.

Dalam praktiknya, spesifik kueri yang Anda jalankan adalah deterministik karena Anda hanya memasukkan satu baris, dan Anda secara eksplisit menentukan nilai kenaikan otomatis. Saya menduga itulah penyebab kebingungan Anda. Namun, tampaknya Anda masih memicu peringatan karena Anda melakukan INSERT ... SELECT ke dalam tabel dengan peningkatan otomatis, dan server tampaknya menerapkan penentuan umum "tidak aman" ke kueri sebagai masalah prinsip, bukan presisi.

Mengganti binlog_format untuk MIXED harus membuat peringatan itu hilang, karena server dapat beralih mode atas kebijaksanaannya sendiri... dan sangat kecil kemungkinannya untuk memiliki efek samping negatif. Jika bukan karena STATEMENT selalu menjadi default (karena awalnya itu adalah satu-satunya jenis replikasi yang tersedia), saya menduga mereka akan membuat MIXED default sejak lama... sebenarnya, jika Anda membiasakan diri dengan internal log biner, Anda mungkin akan cenderung melakukan seperti yang saya lakukan dan menggunakan ROW pada hampir semua hal... ia cenderung membuat log biner yang jauh lebih berguna untuk pemecahan masalah dan membantu Anda keluar dari masalah, karena data baris "lama" dicatat di DELETE dan UPDATE .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Id kenaikan otomatis dengan sekuel di MySQL

  2. Kinerja MySQL DigitalOcean Terbaik – ScaleGrid vs. Database yang Dikelola DigitalOcean

  3. java.lang.AbstractMethodError:com.mysql.jdbc.PreparedStatement.setBlob(ILjava/io/InputStream;)V

  4. kueri sangat lambat setelah migrasi ke mysql 5.7

  5. Bagaimana cara melihat isi tabel di GUI Mysql Workbench?