ความเข้าใจการทำซ้ำใน MySQL: log_bin บันทึกทุกอย่างโดยไม่ระบุฐานข้อมูลหรือไม่?

เมื่อทำการตั้งค่าการทำซ้ำใน MySQL สำหรับฐานข้อมูลหลาย ๆ ฐาน ข้อสงสัยมักเกิดขึ้นเกี่ยวกับการกำหนดค่าการบันทึกไบนารี คำถามที่พบบ่อยคือ MySQL จะบันทึกการเปลี่ยนแปลง ทุกอย่าง ที่ทำกับฐานข้อมูลหรือไม่ หากคุณไม่ระบุฐานข้อมูลเฉพาะในไฟล์การกำหนดค่า ในโพสต์นี้ เราจะทำให้เข้าใจได้ว่าการบันทึกไบนารีของ MySQL ทำงานอย่างไร โดยเฉพาะเมื่อพูดถึงคำสั่ง binlog-do-db และ binlog-ignore-db

ปัญหา: MySQL จัดการการบันทึกฐานข้อมูลอย่างไร?

การบันทึกไบนารีคืออะไร?

การบันทึกไบนารีใน MySQL ใช้เพื่อบันทึกการเปลี่ยนแปลงที่ทำกับฐานข้อมูล บันทึกเหล่านี้มีความสำคัญต่อการทำซ้ำ ช่วยให้ slaves มีสำเนาข้อมูลของ master ที่เป็นปัจจุบัน การเข้าใจวิธีการกำหนดว่าฐานข้อมูลใดถูกบันทึกมีความสำคัญ โดยเฉพาะเมื่อคุณทำงานกับฐานข้อมูลหลาย ๆ ฐานสำหรับลูกค้าต่าง ๆ

ปัญหาการกำหนดค่า

เมื่อทำการกำหนดค่า MySQL ของคุณ คุณอาจสงสัย:

  • ฉันสามารถข้ามการระบุฐานข้อมูลทั้งหมดและเพียงแค่ละเลยบางส่วนได้หรือไม่?
  • ถ้าฉันระบุให้ละเว้นฐานข้อมูลบางส่วน ข้อมูลที่เหลือจะถูกบันทึกอย่างถูกต้องหรือไม่?

เพื่อแสดงถึงสถานการณ์นี้ ให้พิจารณาการตั้งค่าไฟล์การกำหนดค่า my.cnf ทั่วไป

วิธีการแก้ปัญหา: การใช้ binlog-ignore-db อย่างมีประสิทธิภาพ

การใช้ binlog-ignore-db

คุณอาจเลือกที่จะรวมคำสั่งการละเว้นเฉพาะในการกำหนดค่า MySQL ของคุณ เช่น:

binlog-ignore-db = mysql
binlog-ignore-db = informationschema

การกำหนดค่านี้แนะนำว่า เมื่อมีการสั่งการบนฐานข้อมูล mysql หรือ informationschema คำสั่งเหล่านั้นจะไม่ถูกบันทึก อย่างไรก็ตาม สิ่งที่สำคัญคือวิธีที่ฐานข้อมูลเริ่มต้นมีปฏิสัมพันธ์กับคำสั่งเหล่านี้

กฎสำหรับการบันทึกไบนารี

ตามเอกสารของ MySQL:

  • หากฐานข้อมูลเริ่มต้นตรงกับกฎใด ๆ ของ binlog-ignore-db คำสั่งจะไม่ถูกเขียน ลงในบันทึก
  • หากฐานข้อมูลเริ่มต้น ไม่ ตรงกับฐานข้อมูลที่ถูกละเว้น คำสั่งจะถูกบันทึก

ซึ่งหมายความว่าตราบใดที่คุณทำการสั่งการบนฐานข้อมูลที่ ไม่ ตรงกับกฎการละเว้นของคุณ การเปลี่ยนแปลงเหล่านั้นจะถูกบันทึกในบันทึกไบนารี

ผลกระทบต่อการทำซ้ำ

เมื่อคุณลบรายการ binlog-do-db อาจดูเหมือนว่าทุกอย่างถูกบันทึก เพราะคุณจะเห็นการเปลี่ยนแปลงในไฟล์บันทึกไบนารี อย่างไรก็ตาม การบันทึกทุกอย่างไม่ได้รับประกันว่าบันทึกเหล่านี้จะถูกทำซ้ำในเซิร์ฟเวอร์ slave

ปัญหาที่อาจเกิดขึ้น

  • หากไม่มีการระบุ binlog-do-db และฐานข้อมูลที่ถูกละเว้นไม่ตรงกัน MySQL อาจบันทึกทุกอย่าง แต่ slave อาจไม่ได้รับการเปลี่ยนแปลงเหล่านี้
  • เพื่อแก้ไขปัญหาการทำซ้ำ คุณอาจต้องใช้ตัวเลือก replicate-do-db บน slave ซึ่งอาจสวนทางกับความพยายามในการปรับการกำหนดค่าของคุณ

สรุป

ข้อสรุปคือ การละเว้นรายการ binlog-do-db ในขณะที่ใช้ binlog-ignore-db อาจนำไปสู่สถานการณ์ที่ MySQL บันทึกทุกอย่าง ยกเว้นฐานข้อมูลที่ถูกละเว้น อย่างไรก็ตาม สิ่งสำคัญคือต้องมั่นใจว่าคุณรักษาการกำหนดค่าที่เหมาะสมบนเซิร์ฟเวอร์ slave ของคุณเพื่อให้การทำซ้ำทำงานอย่างมีประสิทธิภาพ

ด้วยการเข้าใจความแตกต่างในการกำหนดค่าเหล่านี้ คุณสามารถรักษาการตั้งค่าการทำซ้ำใน MySQL ที่เชื่อถือได้โดยไม่ต้องเจอกับความซับซ้อนที่ไม่จำเป็นในกำหนดการของคุณ

หากคุณมีคำถามเพิ่มเติมเกี่ยวกับการทำซ้ำใน MySQL หรือการกำหนดค่า โปรดอย่าลังเลที่จะติดต่อเรา!