หากคุณกำลังใช้งานด้วยการเปิดใช้งานบันทึกไบนารีคุณสามารถตรวจสอบความน่าเชื่อถือสูงได้
ก่อนอื่นเพื่อดูว่ามีการเปิดใช้งานบันทึกไบนารีหรือไม่ให้เรียกใช้:
SHOW BINARY LOGS;
หากเปิดใช้งานอยู่คุณควรได้ผลลัพธ์ดังนี้:
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000244 | 15462544 |
| mysql-bin.000245 | 102622775 |
+------------------+-----------+
มิฉะนั้นคุณจะได้รับข้อความแสดงข้อผิดพลาด
ตอนนี้ถ้าเปิดใช้งานบันทึกไบนารีแล้วการส่งมอบที่สำเร็จจะถูกเขียนไปยังบันทึกไบนารีด้วย ฉันพูดว่า "ส่งมอบ" แต่ความจริงก็คือการดำเนินการที่ประสบความสำเร็จแม้ในตารางที่ไม่มีธุรกรรมเช่น MyISAM จะถูกเขียนที่นั่น แต่ความจริงแล้วเพื่อให้มั่นใจในผลลัพธ์ของการค้นหาของคุณฉันหวังว่าคุณจะใช้เครื่องมือการทำธุรกรรมเช่น InnoDB มิฉะนั้นคุณจะไม่แน่ใจในสิ่งใด
ตกลงดังนั้นสมมติว่าขณะนี้คุณได้เปิดใช้งานบันทึกไบนารีแล้วและตารางของคุณเป็นธุรกรรม (หวังว่า InnoDB) จากนั้นความสำเร็จของการสืบค้นของคุณคาดว่าจะถูกเขียนลงในบันทึกไบนารี
ตอนนี้คุณต้องตามหาบันทึกเลขฐานสองที่เกี่ยวข้องและค้นหาข้อความค้นหาที่นั่น หากคุณพบข้อความค้นหา - ดีมาก! ถ้าไม่ - มันอาจจะไม่มี ฉันจะอธิบายในไม่ช้า
บันทึกเลขฐานสองแบบใดที่มีข้อความค้นหาของคุณ ดูไฟล์บันทึกไบนารีด้วยตนเองโดยทั่วไปในไดเรกทอรีข้อมูลของคุณ มองหาการประทับเวลาของพวกเขา เมื่อพลังงานเกิดขึ้นระบบจะสร้างไฟล์บันทึกไบนารีใหม่ หามัน ข้อความค้นหาของคุณน่าจะอยู่ในแฟ้มบันทึกไบนารีก่อนหน้านั้น นี่คือการเดา มันอาจเป็นหนึ่งก่อนหน้านั้นเป็นต้น แต่มันก็เป็นการคาดเดาที่ดี
ตอนนี้ใช้mysqlbinlog
ยูทิลิตี้ดำเนินการจากบรรทัดคำสั่งดังนี้:
mysqlbinlog mysql-bin.000245
แทนที่ชื่อไฟล์ด้วยชื่อที่คุณสงสัยว่ามีแบบสอบถาม
สิ่งนี้จะแสดงผลการสืบค้นทั้งหมดในไฟล์บันทึกไบนารีนี้ไปยังเอาต์พุตมาตรฐาน บน Unix ใช้grep
เพื่อค้นหาข้อความค้นหาของคุณ:
mysqlbinlog mysql-bin.000245 | grep "something which identifies the query"
บน Windows โชคดี เปิดด้วย notepad ++ หรืออะไรก็ได้แล้วค้นหาด้วยตนเอง
มีแบบสอบถามหรือไม่ เยี่ยมมาก - คุณรู้ว่ามันได้รับการมุ่งมั่น
แบบสอบถามไม่ได้อยู่ที่นั่นหรือ จำเป็นต้องตรวจสอบsync_binlog
พารามิเตอร์ มันเป็น1 ? จากนั้นเคียวรีไม่ได้อยู่ในบันทึกไบนารี่ ==> เคียวรีไม่ยอมรับ แต่ถ้าsync_binlog
ไม่ใช่1อาจยังมีโอกาสที่แบบสอบถามได้ถูกคอมมิต แต่ยังไม่ได้อยู่ในบันทึกไบนารีเนื่องจากความผิดพลาดอาจเกิดขึ้นหลังจากcommit
และก่อนที่จะมีการล้างข้อมูลบันทึกไบนารีไปยังดิสก์ จากนั้นคุณต้องเปลี่ยนกลับเป็นวิธีอื่น
สิ่งเหล่านั้น: (และหวังว่าคุณจะใช้ InnoDB อีกครั้ง): ค้นหาแถวเดียวที่สามารถระบุผลลัพธ์ของแบบสอบถามได้ ด้วย InnoDB คุณจะได้รับ "ทั้งหมดหรือเปล่า" หากคุณสามารถมั่นใจได้ว่าแถวเดียวได้รับผลกระทบจากแบบสอบถาม - คุณสามารถมั่นใจได้ว่าแบบสอบถามได้เสร็จสิ้นแล้ว
แก้ไข:แน่นอนถ้าเปิดใช้งานบันทึกช้าคุณสามารถคาดหวังว่าแบบสอบถามแบบยาวดังกล่าวจะถูกบันทึกไว้ที่นั่นหลังจากเสร็จสิ้นเช่นกัน ...
โชคดี!