Karena peringatan berikut di mysqld.log
:
[Peringatan] Pernyataan tidak aman yang ditulis ke log biner menggunakan format pernyataan sejak BINLOG_FORMAT = PERNYATAAN. Pernyataan ini tidak aman karena menggunakan klausa LIMIT. Ini tidak aman karena rangkaian baris yang disertakan tidak dapat diprediksi.
Saya ingin beralih ke format replikasi MIXED
.
Tetapi menurut dokumen MySQL:
Mengubah format replikasi saat runtime tidak disarankan bila ada tabel sementara, karena tabel sementara dicatat hanya saat menggunakan replikasi berbasis pernyataan, sedangkan dengan replikasi berbasis baris, mereka tidak dicatat.
Jadi, pertanyaannya adalah bagaimana saya bisa mengidentifikasi jika ada tabel sementara yang ada untuk mengganti format log biner dengan aman?
mysql
replication
kuanta
sumber
sumber
Jawaban:
Karena sebuah binlog akan memiliki format spesifik pada saat Anda melakukan ini, Anda dapat memutuskan untuk tidak bertaruh dengan dua format tersebut secara bersamaan walaupun MySQL (eh Oracle [masih tidak dapat berbicara]] membangun fitur ini.
Untuk memainkannya benar-benar aman tanpa me-restart mysql, coba yang berikut ini:
Ini akan meninggalkan binlog terakhir dalam format 'MIXED'. Binlog penultimiate (di sebelah terakhir) ada hanya membawa penutupan binlog terakhir yang ada dalam format sebelumnya.
Semua sesi yang ada sebelum yang pertama
FLUSH LOGS;
akan mulai menulis di binlog terakhir setelahUNLOCK TABLES;
dijalankan.Cobalah !!!
CAVEAT
Memberi kredit di mana kredit jatuh tempo, jawaban saya benar-benar mendukung jawaban Jonathan . Saya hanya menutup dan membuka binlog di atas itu. Dia mendapat +1 karena membawa ini dulu.
UPDATE 2011-10-12 13:58 EDT
Jika Anda melakukan ini pada Master yang aktif dan ada satu atau lebih Budak yang mereplikasi dari Master itu, Anda perlu khawatir tentang log relai yang berada dalam format baru juga. Inilah yang dapat Anda lakukan:
Di Budak, jalankan
STOP SLAVE;
Pada Master jalankan ini:
Di Budak, jalankan
START SLAVE;
Menjalankan
STOP SLAVE;
danSTART SLAVE;
memutar log relai dan menyebabkan entri baru direplikasi dalam format apa pun. Anda mungkin ingin menerapkan perubahan binlog_format di dalam slave juga.sumber
Untuk berpindah binlog_format saat runtime dapat Anda lakukan:
Ini akan mengatur semua sesi BARU menjadi format binlog campuran. Semua sesi yang ada akan menjadi apa pun yang ditetapkan sebelumnya sampai berakhir.
Anda juga dapat melakukan
set session binlog_format = 'MIXED';
secara manual untuk menyelesaikan masalah dengan sesi khusus.sumber