Mengganti format BINLOG
Saya awali dulu, aslinya baru tahu soal format binary logging milik MySQL dari laporan mas Hartono soal errornya. 😀 Sayang pesan error yang dicopas tidak lengkap dan tidak dijelaskan kenapa bisa begitu, tapi kurang lebih mestinya seperti ini:
Jan 30 12:09:58 ubuntu mysqld[10041]: 2017-01-30 12:09:58 140268010343168 [Warning] Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statements writing to a table with an auto-increment column after selecting from another table are unsafe because the order in which rows are retrieved determines what (if any) rows will be written. This order cannot be predicted and may differ on master and the slave.
Yang pasti akhirnya saya baca – baca apa itu binlog yang dimaksud. 🙂 Jadi ini adalah format pencatatan (logging) dari aktivitas database dari MySQL yang disimpan secara format khusus bukan teks, setidaknya ada 3 jenis yang bisa digunakan:
- STATEMENT – Default. Ini berarti setiap eksekusi query SQL yang berpengaruh ke data atau struktur tabel akan dicatat.
- ROW – Sedangkan ini akan mencatat per baris.
- MIXED – Campuran.
Saya kurang jago menjelaskan detailnya, tapi bisa dibaca dokumentasinya dari sini: https://mariadb.com/kb/en/mariadb/binary-log-formats/
Sedangkan untuk mengubah format binary logging dari MySQL/MariaDB/Percona bisa jalankan salah satu dari ini:
SET GLOBAL binlog_format = 'STATEMENT';
SET GLOBAL binlog_format = 'ROW';
SET GLOBAL binlog_format = 'MIXED';
Eksekusi yang anda butuhkan saja.
Kembali ke masalahnya, ini solusinya bagaimana? Silahkan coba eksekusi perintah ini:
FLUSH TABLES WITH READ LOCK;
FLUSH LOGS;
SET GLOBAL binlog_format = 'MIXED';
FLUSH LOGS;
UNLOCK TABLES;
Kita akan membersihkan tabel yang terkunci pembacaannya, log dan mengganti format binlog ke MIXED. Setelah itu mestinya akan normal kembali database MySQLnya.