ความเข้าใจการทำซ้ำใน 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 หรือการกำหนดค่า โปรดอย่าลังเลที่จะติดต่อเรา!