MySQL Replication: ‘Got fatal error 1236’

Posted In Database - By Tum. On Thursday, June 25th, 2015 With 0 Comments

mysql-logo
ระบบ MySQL replication จะมีการทำงานโดย slave จะดึงข้อมูลจาก binlog ที่ master server เพื่อไปทำการ replay ที่เครื่อง slave เอง ซึ่งถ้าหากเกิดปัญหา slave หยุดทำงานด้วย error 1236 ดังข้างล่าง เราสามาถทำการแก้ไขอย่างไร และสาเหตุเกิดจากอะไรมาดูกันครับ

สาเหตุเกิดจาก master server เกิด crash ทำให้ binlog cache ไม่ได้ flush ลง disk (ทำให้เกิด binlog corrupt) แต่ในขณะนั้น slave ได้รับ position ใหม่แต่ไม่สามารถดึงข้อมูลจาก master ได้เนื่องจาก binlog ที่ทำการดึงเกิด corrupt เรียบร้อยแล้ว

การแก้ไข MySQL Replication: ‘Got fatal error 1236’

  1. ตรวจสอบหา binlog และ position ที่สามารถให้ slave เริ่มทำงานใหม่ได้ โดยทั้วไปแล้ว binlog ที่ corrupt จะไม่สามารถเขียนต่อได้ ดังนั้น MySQL จึงสร้าง binlog ขึ้นมาใหม่โดยที่ชื่อจะต่อจากชื่อเดิม เช่น ในตัวอย่าง binlog ที่เกิดปัญหาคือ mysql-bin.000005 ดังนั้น binlog ที่จะใช้เป็นตัวอ้างอิงให้ slave ทำงานใหม่คือ mysql-bin.000006
  2. หลังจากได้ binlog แล้วให้รันคำสั่งด้านล่างที่ slave เพื่อให้ slave เริ่ม sync ข้อมูลจากจุดอ้างอิงใหม่
  3. ตรวจสอบ slave status ด้วยคำสั่ง

การป้องกันปัญหา MySQL Replication: ‘Got fatal error 1236’
เปิดใช้งาน sync_binlog ที่ master server ซึ่งจะช่วยให้ master server ทำการ flush cache ทุกครั้งที่มีการ write

  • แก้ไขที่ MySQL Console
  • แก้ไขที่ my.cnf

Leave a comment

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

*