Jika Anda menjalankan dengan log biner diaktifkan ini dapat diperiksa dengan keandalan yang relatif tinggi.
Pertama, untuk melihat apakah log biner memang diaktifkan, jalankan:
SHOW BINARY LOGS;
Jika diaktifkan, Anda harus mendapatkan output seperti ini:
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000244 | 15462544 |
| mysql-bin.000245 | 102622775 |
+------------------+-----------+
Kalau tidak, Anda akan mendapatkan pesan kesalahan.
Sekarang, jika log biner diaktifkan, maka komit yang berhasil juga ditulis ke log biner. Saya mengatakan "komit", tetapi kebenarannya adalah operasi yang berhasil, bahkan pada tabel non transaksional seperti MyISAM, ditulis di sana. Tapi, jujur saja, untuk memiliki kepastian tentang hasil dari pertanyaan Anda, saya berharap demi Anda menggunakan mesin transaksional seperti InnoDB, atau Anda tidak dapat memastikan apa pun.
OK, jadi anggaplah sekarang bahwa Anda memiliki log biner dihidupkan, dan bahwa tabel Anda bersifat transaksional (semoga InnoDB), maka penyelesaian kueri Anda yang berhasil diharapkan akan ditulis ke log biner.
Anda sekarang harus memburu log biner yang relevan dan mencari kueri di sana. Jika Anda menemukan kueri - bagus! Jika tidak - kemungkinan besar tidak ada di sana. Saya akan menjelaskan segera.
Log biner mana yang berisi kueri Anda? Lihatlah file log biner sendiri, biasanya di direktori data Anda. Cari cap waktu mereka. Ketika kekuatan muncul, log biner baru telah dibuat. Temukan. Pertanyaan Anda kemungkinan besar ada di log biner sebelum itu. Ini dugaan. Bisa juga satu sebelum itu, dll. Tapi itu dugaan bagus.
Sekarang, menggunakan mysqlbinlogutilitas, jalankan, dari baris perintah, sesuatu seperti ini:
mysqlbinlog mysql-bin.000245
Ganti nama file dengan yang Anda duga berisi kueri.
Ini akan menampilkan semua permintaan dalam file log biner ini menjadi output standar. Di Unix, gunakan grepuntuk menemukan kueri Anda:
mysqlbinlog mysql-bin.000245 | grep "something which identifies the query"
Di Windows, semoga berhasil. Buka dengan notepad ++ atau apalah dan cari secara manual.
Apakah ada kueri di sana? Besar - Anda tahu itu telah dilakukan.
Apakah kueri tidak ada di sana? Perlu memeriksa sync_binlogparam. Apakah ini 1 ? Maka kueri tidak dalam log biner ==> kueri tidak dikomit. Tapi jika sync_binlogtidak 1 , masih bisa menjadi kesempatan bahwa permintaan telah berkomitmen namun tidak di log biner, sebagai kecelakaan itu mungkin terjadi hanya setelah commitdan sebelum log biner memerah ke disk. Anda kemudian harus kembali ke cara lain.
Yaitu: (dan mudah-mudahan, sekali lagi, Anda menggunakan InnoDB): cari satu baris yang dapat mengidentifikasi hasil kueri. Dengan InnoDB Anda mendapatkan "semua atau tidak sama sekali". Jika Anda dapat memastikan bahwa satu baris dipengaruhi oleh kueri - Anda dapat yakin bahwa kueri telah selesai.
sunting: tentu saja, jika log lambat diaktifkan, Anda dapat mengharapkan permintaan panjang tersebut untuk dicatat di sana setelah selesai juga ...
Semoga berhasil!