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
.