คู่มือ MySQL Replication: ตั้งค่า, แก้ปัญหา, จัดการ

目次

1. MySQL Replication คืออะไร? ภาพรวมและการใช้งาน

MySQL Replication เป็นฟีเจอร์ที่ทำการซิงโครไนซ์สำเนาฐานข้อมูลไปยังเซิร์ฟเวอร์อื่นแบบเรียลไทม์ ทำให้สามารถเพิ่มความทนทานและประสิทธิภาพของฐานข้อมูลได้ ต่อไปนี้จะอธิบายอย่างละเอียดว่า MySQL Replication ถูกใช้ในสถานใดบ้างและกลไกการทำงานของมัน

ภาพรวมของ MySQL Replication

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

การใช้งาน MySQL Replication

MySQL Replication ถูกนำไปใช้ในหลายกรณีต่อไปนี้อย่างกว้างขวาง
  • การรับประกันความพร้อมใช้งานสูง:ในกรณีที่เกิดข้อขัดข้อง สามารถใช้เซิร์ฟเวอร์สำรองเพื่อลดระยะเวลาการหยุดทำงานให้น้อยที่สุด
  • การกระจายภาระงาน:การส่งคิวรีอ่านอย่างเดียวไปยังเซิร์ฟเวอร์สำรองช่วยกระจายภาระของเซิร์ฟเวอร์หลัก
  • การรักษาข้อมูลและการสำรองข้อมูล:Replication ทำการคัดลอกข้อมูลแบบเรียลไทม์ ทำให้สามารถใช้เป็นการสำรองข้อมูลได้

ประเภทของ Replication

MySQL Replication มีประเภทต่อไปนี้ตามวิธีการซิงโครไนซ์ข้อมูล
  • Replication แบบอะซิงโครนัส:เซิร์ฟเวอร์หลักดำเนินการต่อโดยไม่รอการส่งข้อมูลอัปเดตไปยังเซิร์ฟเวอร์สำรอง ทำให้ตอบสนองได้เร็ว แต่ในกรณีที่เกิดข้อขัดข้อง บางส่วนของข้อมูลอาจไม่ถึงเซิร์ฟเวอร์สำรอง
  • Replication แบบกึ่งซิงโครนัส:ดำเนินการต่อหลังจากยืนยันว่าข้อมูลได้ถูกสะท้อนบนเซิร์ฟเวอร์สำรองแล้ว ทำให้มีความน่าเชื่อถือสูงกว่าแบบอะซิงโครนัส แต่ความเร็วในการตอบสนองจะช้าก่อนหน่อย
ในส่วนต่อไปนี้ จะอธิบายแนวคิดพื้นฐานของ MySQL Replication เช่น Binary Log และ GTID

2. แนวคิดพื้นฐานของการทำสำเนา MySQL

เพื่อทำความเข้าใจการทำสำเนา MySQL จำเป็นต้องเข้าใจบทบาทของบันทึกไบนารีและGTID(Global Transaction ID) ซึ่งเป็นส่วนสำคัญในกระบวนการทำสำเนา สิ่งเหล่านี้เป็นพื้นฐานที่ทำให้ข้อมูลถูกทำสำเนาอย่างแม่นยำ。

บทบาทของมาสเตอร์และสเลฟ

ในการทำสำเนา MySQL, เซิร์ฟเวอร์มาสเตอร์และเซิร์ฟเวอร์สเลฟมีบทบาทที่แตกต่างกัน เซิร์ฟเวอร์มาสเตอร์บันทึกการอัปเดตข้อมูลลงในบันทึกไบนารีและส่งข้อมูลนั้นไปยังสเลฟ เซิร์ฟเวอร์สเลฟจะนำบันทึกที่ได้รับจากมาสเตอร์ไปใช้และอัปเดตข้อมูล ด้วยวิธีนี้สเลฟจึงสามารถรักษาข้อมูลที่อัปเดตล่าสุดของมาสเตอร์ได้。

บันทึกไบนารีและบันทึกรีเลย์

พื้นฐานของการทำสำเนา MySQL ใช้บันทึกสองประเภทต่อไปนี้。
  1. บันทึกไบนารี(Binary Log)
  • บันทึกไบนารีเป็นบันทึกการอัปเดตข้อมูลบนเซิร์ฟเวอร์มาสเตอร์ (เช่น INSERT、UPDATE、DELETE) ซึ่งทำให้เซิร์ฟเวอร์สเลฟสามารถรักษาสถานะข้อมูลเช่นเดียวกับมาสเตอร์ได้。
  1. บันทึกรีเลย์(Relay Log)
  • บันทึกรีเลย์เป็นบันทึกที่เซิร์ฟเวอร์สเลฟบันทึกบันทึกไบนารีที่ได้รับจากมาสเตอร์ไว้ในระบบของตนเอง เธรด SQL ของสเลฟจะดำเนินการบันทึกรีเลย์นี้ตามลำดับเพื่อสะท้อนการเปลี่ยนแปลงของข้อมูล。

GTID(Global Transaction ID) คืออะไร

GTID เป็นกลไกที่กำหนด ID ที่ไม่ซ้ำกันให้กับแต่ละทรานแซกชัน ช่วยรักษาความสอดคล้องของการซิงโครไนซ์ระหว่างสเลฟหลายตัว การใช้ GTID ทำให้ไม่ต้องระบุตำแหน่งของบันทึกไบนารี และสามารถนำทรานแซกชันที่ยังไม่ได้รับจากมาสเตอร์ไปใช้กับสเลฟโดยอัตโนมัติ ทำให้การจัดการง่ายขึ้นอย่างมาก。

ข้อดีของ GTID

  • การระบุที่ไม่ซ้ำกัน:แต่ละทรานแซกชันจะได้รับ GTID ที่ไม่ซ้ำกัน ทำให้ทราบได้ชัดเจนว่าทรานแซกชันใดได้ถูกนำไปใช้แล้ว。
  • การกู้คืนง่าย:ด้วยการใช้ GTID แม้มาสเตอร์หรือสเลฟจะรีสตาร์ท จะมีการนำทรานแซกชันที่ยังไม่ได้รับการนำไปใช้เท่านั้นมานำไปใช้ใหม่。
  • เพิ่มประสิทธิภาพการจัดการปฏิบัติการ:แม้ในสภาพแวดล้อมขนาดใหญ่ที่มีสเลฟหลายเครื่อง ก็สามารถจัดการได้ง่ายโดยคงความสอดคล้องของทรานแซกชัน。
เพื่อใช้ GTID จำเป็นต้องตั้งค่า gtid_mode=ON และ enforce_gtid_consistency=ON บนมาสเตอร์และสเลฟ การตั้งค่าเหล่านี้ทำให้สามารถเปิดใช้งานการทำสำเนาโดยใช้ GTID ได้。 ในส่วนต่อไปจะอธิบายขั้นตอนการตั้งค่าการทำสำเนา MySQL อย่างละเอียด。

3. ขั้นตอนการตั้งค่า MySQL Replication

ในส่วนนี้จะแนะนำขั้นตอนการตั้งค่า MySQL Replication อย่างละเอียด โดยการทำตามขั้นตอนต่อไปนี้จะช่วยให้คุณตั้งค่าระบบ master‑slave เบื้องต้นและทำให้ข้อมูลซิงโครไนซ์แบบเรียลไทม์

การตั้งค่าเซิร์ฟเวอร์ Master

ก่อนอื่นให้แก้ไขไฟล์ตั้งค่าเซิร์ฟเวอร์ Master (โดยทั่วไปคือ my.cnf หรือ my.ini) เพื่อเปิดใช้งาน binary log และตั้งค่า Server ID
  1. แก้ไขไฟล์ตั้งค่า
  • เพิ่มการตั้งค่าดังต่อไปนี้ในส่วน [mysqld] และตั้งค่า Server ID เป็นค่าที่ไม่ซ้ำ (เช่น 1)
   [mysqld]
   server-id=1
   log-bin=mysql-bin
  • server-id ต้องระบุหมายเลขที่ไม่ซ้ำกันสำหรับแต่ละเซิร์ฟเวอร์ และ log-bin หมายถึงการเปิดใช้งาน binary log
  1. สร้างผู้ใช้สำหรับ Replication
  • สร้างผู้ใช้เฉพาะสำหรับ Replication บนเซิร์ฟเวอร์ Master และมอบสิทธิ์ที่จำเป็น
   CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
   GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
   FLUSH PRIVILEGES;
  • ผู้ใช้นี้จำเป็นสำหรับให้เซิร์ฟเวอร์ Slave เข้าถึงข้อมูลของ Master
  1. ตรวจสอบสถานะของ Master
  • ตรวจสอบไฟล์ binary log ปัจจุบันและตำแหน่ง (position) ของมัน ข้อมูลนี้จำเป็นสำหรับการตั้งค่าเซิร์ฟเวอร์ Slave
   SHOW MASTER STATUS;
  • ค่า File (ชื่อไฟล์ log) และ Position (ตำแหน่ง) ที่แสดงจากคำสั่งนี้จะใช้ในการตั้งค่า Slave

การตั้งค่าเซิร์ฟเวอร์ Slave

ต่อไปให้แก้ไขไฟล์ตั้งค่าเซิร์ฟเวอร์ Slave เพื่อกำหนด Server ID และข้อมูลของ Master
  1. แก้ไขไฟล์ตั้งค่า
  • เซิร์ฟเวอร์ Slave ก็ต้องตั้งค่า server-id ให้เป็นค่าที่ไม่ซ้ำ (เช่น 2) โดยต้องแตกต่างจาก Server ID ของ Master
   [mysqld]
   server-id=2
  • เพื่อป้องกันการเขียนข้อมูลบน Slave มักตั้งค่า read_only=ON ด้วย
  1. ตั้งค่าข้อมูล Master บน Slave
  • บนเซิร์ฟเวอร์ Slave ให้รันคำสั่งต่อไปนี้เพื่อระบุ hostname ของ Master, ผู้ใช้, ชื่อไฟล์ binary log และตำแหน่ง
   CHANGE MASTER TO
       MASTER_HOST='master_host',
       MASTER_USER='repl',
       MASTER_PASSWORD='password',
       MASTER_LOG_FILE='mysql-bin.000001',
       MASTER_LOG_POS=123;
  • ใส่ค่า MASTER_LOG_FILE และ MASTER_LOG_POS ที่ได้จากการตรวจสอบบน Master ก่อนหน้านี้
  1. เริ่มต้น Replication
  • บนเซิร์ฟเวอร์ Slave ให้รันคำสั่งต่อไปนี้เพื่อเริ่ม Replication
   START SLAVE;

การตรวจสอบสถานะของ Replication

ตรวจสอบว่า Replication ระหว่าง Master และ Slave ถูกตั้งค่าอย่างถูกต้อง
  • ตรวจสอบสถานะของ Master
  SHOW MASTER STATUS;
  • ตรวจสอบสถานะของ Slave
  SHOW SLAVE STATUSG;
  • หากค่า Slave_IO_Running และ Slave_SQL_Running แสดงเป็น Yes แสดงว่า Replication ทำงานอย่างปกติ
ในส่วนต่อไปจะอธิบายวิธีการตั้งค่า MySQL Replication ขั้นสูง รวมถึงความแตกต่างระหว่าง asynchronous และ semi‑synchronous replication และขั้นตอนการตั้งค่าโดยใช้ GTID

4. ประเภทและการประยุกต์ใช้การทำสำเนา

MySQL Replication มี 2 ประเภทตามวิธีการซิงโครไนซ์ข้อมูลคือ การทำสำเนาแบบอะซิงโครนัส และ การทำสำเนาแบบกึ่งซิงโครัส การเข้าใจลักษณะและเกณฑ์การเลือกตามสถานการณ์การใช้งานจะช่วยเพิ่มประสิทธิภาพและความน่าเชื่อถือของระบบได้ นอกจากนี้ ยังอธิบายข้อดีของการตั้งค่าการทำสำเนาโดยใช้ GTID (Global Transaction Identifier) อีกด้วย

ความแตกต่างระหว่างการทำสำเนาแบบอะซิงโครนัสและการทำสำเนาแบบกึ่งซิงโครนัส

1. การทำสำเนาแบบอะซิงโครนัส

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

2. การทำสำเนาแบบกึ่งซิงโครนัส

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

การทำสำเนาโดยใช้ GTID

GTID (Global Transaction Identifier) เป็นกลไกที่กำหนด ID ที่ไม่ซ้ำกันให้กับแต่ละธุรกรรมเพื่อรักษาความสอดคล้องของธุรกรรมระหว่างเซิร์ฟเวอร์หลักและสำรอง การเปิดใช้งาน GTID ทำให้การจัดการการทำสำเนาเป็นเรื่องง่ายขึ้นเมื่อเทียบกับการทำสำเนาแบบระบุตำแหน่งบันทึกไบนารีแบบเดิม

ข้อดีของ GTID

  • การปรับปรุงความสอดคล้องของข้อมูล:ด้วย GTID สามารถตรวจจับธุรกรรมที่ยังไม่ได้ถูกนำไปใช้บนเซิร์ฟเวอร์สำรองโดยอัตโนมัติ ทำให้รักษาความสอดคล้องของข้อมูลได้ง่ายขึ้น
  • การทำให้การจัดการการทำสำเนาง่ายขึ้น:การใช้ GTID ทำให้การสลับหรือกู้คืนเซิร์ฟเวอร์หลักและสำรองทำได้อย่างมีประสิทธิภาพ เนื่องจากไม่ต้องระบุตำแหน่งบันทึกไบนารี ทำให้การจัดการเป็นเรื่องง่าย

การตั้งค่า GTID Replication

เพื่อใช้ GTID จำเป็นต้องเพิ่มตัวเลือกต่อไปนี้ในไฟล์ตั้งค่าของเซิร์ฟเวอร์หลักและสำรองและเปิดใช้งาน การตั้งค่าเซิร์ฟเวอร์หลัก
[mysqld]
server-id=1
log-bin=mysql-bin
gtid_mode=ON
enforce_gtid_consistency=ON
การตั้งค่าเซิร์ฟเวอร์สำรอง
[mysqld]
server-id=2
gtid_mode=ON
enforce_gtid_consistency=ON
read_only=ON
ในสภาพแวดล้อมที่เปิดใช้งาน GTID เพียงแค่ใช้คำสั่ง CHANGE MASTER TO เพื่อตั้งค่าข้อมูลของเซิร์ฟเวอร์หลักบนเซิร์ฟเวอร์สำรอง ระบบการทำสำเนาโดยใช้ GTID จะทำงานโดยอัตโนมัติ ในส่วนต่อไปนี้ จะอธิบายวิธีการบำรุงรักษาการทำสำเนา MySQL และจุดสำคัญในการตรวจสอบการจัดการการดำเนินงาน

5. การบำรุงรักษาและการตรวจสอบการทำสำเนา

เพื่อให้การดำเนินการ MySQL Replication อย่างเหมาะสม จำเป็นต้องมีการบำรุงรักษาและการตรวจสอบเป็นประจำ ในส่วนนี้จะแนะนำคำสั่งเพื่อยืนยันว่าการทำสำเนาทำงานอย่างถูกต้องและวิธีการจัดการกับข้อผิดพลาดทั่วไป

วิธีตรวจสอบสถานะการทำสำเนา

เพื่อให้เข้าใจสถานะของการทำสำเนา ให้ใช้คำสั่งต่อไปนี้เพื่อตรวจสอบสถานะการซิงค์ระหว่างมาสเตอร์และสเลฟ

ตรวจสอบสถานะของมาสเตอร์

สถานะการทำสำเนาบนเซิร์ฟเวอร์มาสเตอร์สามารถตรวจสอบได้ด้วยคำสั่ง SHOW MASTER STATUS คำสั่งนี้จะแสดงชื่อไฟล์บันทึกไบนารีและตำแหน่งปัจจุบัน เพื่อให้ตรวจสอบการอัปเดตล่าสุดที่ควรส่งไปยังสเลฟ
SHOW MASTER STATUS;
ผลลัพธ์ของคำสั่งนี้จะมีรายการต่อไปนี้
  • File:ชื่อไฟล์บันทึกไบนารีปัจจุบันที่มาสกำลังเขียน
  • Position:ตำแหน่งปัจจุบันในบันทึกไบนารี
  • Binlog_Do_DB และ Binlog_Ignore_DB:ฐานข้อมูลที่เป็นเป้าหมายของการทำสำเนา

ตรวจสอบสถานะของสเลฟ

สถานะการทำสำเนาบนเซิร์ฟเวอร์สเลฟสามารถตรวจสอบได้ด้วยคำสั่ง SHOW SLAVE STATUS ผลลัพธ์ของคำสั่งนี้จะมีข้อมูลที่ใช้ตัดสินว่าเซิร์ฟเวอร์สเลฟทำงานอย่างถูกต้องหรือไม่
SHOW SLAVE STATUSG;
สำคัญที่ควรตรวจสอบมีดังนี้
  • Slave_IO_Running และ Slave_SQL_Running:หากทั้งสองเป็น Yes แสดงว่าสเลฟทำงานอย่างปกติ
  • Seconds_Behind_Master:แสดงจำนวนวินาทีที่สเลฟล่าช้ากว่ามาสเตอร์ โดยค่าที่เป็น 0 ถือเป็นสภาพที่ดีที่สุด

การแก้ไขปัญหาการทำสำเนา

ปัญหาที่มักเกิดขึ้นระหว่างการดำเนินการทำสำเนาได้แก่ข้อผิดพลาดการเชื่อมต่อและความไม่สอดคล้องของข้อมูล ด้านล่างเป็นข้อความแสดงข้อผิดพลาดทั่วไปและวิธีการแก้ไข

1. ข้อผิดพลาดการเชื่อมต่อ

หาก Slave_IO_Running เป็น No หมายความว่าสเลฟไม่สามารถเชื่อมต่อกับมาสเตอร์ได้ โปรดลองวิธีแก้ต่อไปนี้
  • ตรวจสอบชื่อโฮสต์หรือที่อยู่ IP ของเซิร์ฟเวอร์มาสเตอร์:ยืนยันว่าที่อยู่ของมาสเตอร์ถูกต้อง
  • ตรวจสอบการตั้งค่าไฟร์วอลล์:ยืนยันว่าพอร์ตที่จำเป็น (โดยทั่วไปคือ 3306) เปิดอยู่

2. ความไม่สอดคล้องของข้อมูล

หากมีข้อความข้อผิดพลาดใน Last_Error แสดงว่ามีความไม่สอดคล้องของข้อมูลระหว่างมาสเตอร์และสเลฟ ในกรณีที่เกิดความไม่สอดคล้องนี้ จำเป็นต้องหยุดสเลฟชั่วคราวและทำการแก้ไข
STOP SLAVE;
# หลังการแก้ไขให้เริ่มใหม่
START SLAVE;

3. การแก้ไขความล่าช้า

สาเหตุที่สเลฟล่าช้าอาจมาจากประสิทธิภาพของฮาร์ดแวร์สเลฟหรือปัญหาเครือข่าย หากจำเป็น การเสริมโครงสร้างของสเลฟอาจช่วยปรับปรุงได้ ในส่วนต่อไป เราจะเจาะลึกรายละเอียดของปัญหาในการทำสำเนาและวิธีแก้ไขเพิ่มเติม

6. ปัญหาที่พบบ่อยและวิธีการแก้ไข

ใน MySQL Replication อาจเกิดปัญหาต่าง ๆ ระหว่างการดำเนินงานได้ ที่นี่เราจะอธิบายรายละเอียดเกี่ยวกับปัญหาที่พบบ่อยและวิธีการแก้ไข การค้นพบปัญหาแต่เนิ่น ๆ และการจัดการอย่างเหมาะสมจะช่วยรักษาการทำงานของระบบให้เสถียรได้

1. Slave_IO_Running ที่หยุดทำงาน

อาการSHOW SLAVE STATUS คำสั่งแสดงผล, Slave_IO_Running เป็น No หมายถึงสเลฟไม่สามารถเชื่อมต่อกับมาสเตอร์ได้ สาเหตุและการแก้ไข
  • ปัญหาเครือข่าย:หากการเชื่อมต่อเครือข่ายมีปัญหา สเลฟจะไม่สามารถเข้าถึงมาสเตอร์ได้ ตรวจสอบการตั้งค่าไฟร์วอลล์และยืนยันว่าสามารถเข้าถึงมาสเตอร์ได้。
  • การตั้งค่าชื่อโฮสต์หรือ IP ของมาสเตอร์ผิดพลาด:กรุณาตรวจสอบว่าชื่อโฮสต์หรือ IP ที่ระบุใน CHANGE MASTER TO ถูกต้องหรือไม่。
  • ปัญหาสิทธิ์ผู้ใช้:หากผู้ใช้ replication ที่ตั้งค่าบนมาสเตอร์ไม่มีสิทธิ์เพียงพอ การเชื่อมต่อจะล้มเหลว ตรวจสอบว่ามีการให้สิทธิ์ที่ถูกต้องด้วย GRANT REPLICATION SLAVE

2. ข้อมูลไม่สอดคล้องของสเลฟ

อาการ:เมื่อข้อมูลระหว่างสเลฟและมาสเตอร์ไม่ตรงกัน ข้อมูลของสเลฟอาจอยู่ในสภาวะไม่สอดคล้อง สาเหตุและการแก้ไข
  • การแก้ไขข้อมูลด้วยตนเอง:หากเกิดความไม่สอดคล้อง ให้หยุดสเลฟและแก้ไขธุรกรรมที่มีปัญหาโดยมือ หลังจากแก้ไขแล้วเริ่มสเลฟใหม่เพื่อคืนการทำงานของ replication ให้เป็นปกติ STOP SLAVE; # แก้ไขข้อมูลตามต้องการ START SLAVE;
  • การซิงโครไนซ์ข้อมูลใหม่:หากเกิดความไม่สอดคล้องในระดับใหญ่ ให้ทำการสำรองข้อมูลเต็มจากมาสเตอร์แล้วซิงโครไนซ์ใหม่กับสเลฟเพื่อแก้ไข

3. ความล่าช้าของการทำซ้ำ

อาการ:เมื่อผลลัพธ์ของ SHOW SLAVE STATUS แสดงค่า Seconds_Behind_Master ไม่เป็น 0 หมายถึงสเลฟล่าช้ากว่ามาสเตอร์ โดยทั่วไปค่านี้ยิ่งน้อยยิ่งดี สาเหตุและการแก้ไข
  • ประสิทธิภาพฮาร์ดแวร์ของสเลฟ:หากสเปคของเซิร์ฟเวอร์สเลฟประมวลผลอาจไม่ทันทำให้เกิดความล่าช้า การอัปเกรดฮาร์ดแวร์เป็นวิธีที่ได้ผล
  • การปรับแต่งคิวรี:หากคิวรีที่ส่งจากมาสเตอร์ใช้เวลานานในการดำเนินการบนสเลฟ จะทำให้เกิดความล่าช้า การเพิ่มดัชนีและปรับแต่งคิวรีจะช่วยลดเวลาในการประมวลผล

4. ข้อผิดพลาดสิทธิ์ของผู้ใช้ replication

อาการ:หาก Last_Error แสดงข้อความข้อผิดพลาดเกี่ยวกับสิทธิ์ แสดงว่าสตรีบอาจไม่มีสิทธิ์ที่จำเป็นในการเชื่อมต่อกับมาสเตอร์ สาเหตุและการแก้ไข
  • การให้สิทธิ์ใหม่โดยการตั้งค่าใหม่:ตรวจสอบว่ามีผู้ใช้ที่มีสิทธิ์เหมาะสมบนมาสเตอร์หรือไม่ และหากจำเป็นให้ทำการตั้งค่าใหม่ GRANT REPLICATION SLAVE ON *.* TO 'repl'@'IPของสเลฟ'; FLUSH PRIVILEGES;

5. การขยายใหญ่ของบันทึกไบนารี

อาการ:Binary Log ของมาสเตอร์อาจขยายใหญ่จนทำให้พื้นที่ดิสก์ของเซิร์ฟเวอร์อัดแน่น สาเหตุและการแก้ไข
  • การหมุนเวียน Binary Log:การลบหรือเก็บถาวร Binary Log อย่างสม่ำเสมอจะช่วยป้องกันการขยายใหญ่ การตั้งค่า expire_logs_days จะทำให้ลบล็อกที่เกินระยะเวลาที่กำหนดโดยอัตโนมัติ SET GLOBAL expire_logs_days = 7; # ลบล็อกที่เกิน 7 วัน
ด้วยการทำความเข้าใจปัญหาที่พบบ่อยและวิธีแก้ไขใน MySQL Replication จะทำให้การจัดการการดำเนินงานเป็นไปอย่างราบรื่น ในส่วนต่อไป เราจะสรุปบทความโดยทบทวนจุดสำคัญของการดำเนินงาน Replication

7. สรุป

MySQL Replication เป็นฟีเจอร์สำคัญที่ช่วยเพิ่มความสอดคล้องของข้อมูลและความน่าเชื่อถือของระบบ ในบทความนี้ เราได้อธิบายอย่างละเอียดตั้งแต่แนวคิดพื้นฐานของ MySQL Replication ขั้นตอนการตั้งค่า การเฝ้าติดตามและการแก้ไขปัญหาในการจัดการการดำเนินงาน สุดท้าย เราจะสรุปประเด็นสำคัญในการจัดการการดำเนินงานของ Replication ด้านล่างนี้

การทบทวนประเด็นสำคัญ

  1. ประเภทและการเลือก Replication
  • การทำ Replication แบบอะซิงโครนัสมีความเร็วในการตอบสนองสูงและเหมาะสำหรับการกระจายภาระงาน แต่หากต้องการความน่าเชื่อถือ ควรใช้ Replication แบบกึ่งซิงโครนัส เลือกวิธีที่เหมาะสมตามความต้องการของระบบ
  1. การใช้ประโยชน์จาก GTID
  • ด้วยการใช้ GTID คุณไม่จำเป็นต้องระบุตำแหน่งของบันทึกไบนารี ทำให้การจัดการธุรกรรมเป็นไปอย่างราบรื่น โดยเฉพาะอย่างยิ่งในสภาพแวดล้อมที่มีสลาวหลายตัวหรือระบบที่ต้องการการกู้คืนจากความล้มเหลว
  1. การตรวจสอบสถานะเป็นประจำ
  • SHOW MASTER STATUSและSHOW SLAVE STATUSเพื่อตรวจสอบสถานะการทำงานของมาสเตอร์และสลาวเป็นประจำเป็นสิ่งสำคัญ หากพบความผิดปกติ การตอบสนองอย่างรวดเร็วจะช่วยลดความเสี่ยงของข้อมูลไม่สอดคล้องและความล่าช้าให้เหลือน้อยที่สุด
  1. การเรียนรู้การแก้ไขปัญหาทั่วไป
  • การเชื่อมต่อสลาวผิดพลาด, ข้อมูลไม่สอดคล้อง, ความล่าช้า ฯลฯ เป็นปัญหาที่มักเกิดขึ้นกับ MySQL Replication การเข้าใจวิธีแก้ไขพื้นฐานสำหรับแต่ละปัญหาจะทำให้การจัดการปัญหาในระหว่างการดำเนินงานเป็นไปอย่างราบรื่น
  1. การจัดการบันทึกไบนารี
  • เมื่อบันทึกไบนารีมีขนาดใหญ่เกินไป จะทำให้พื้นที่ดิสก์ของเซิร์ฟเวอร์อัดแน่น ดังนั้นจึงแนะนำให้ใช้การตั้งค่า expire_logs_days เพื่อกำหนดการลบอัตโนมัติและทำการบำรุงรักษาเป็นประจำ
MySQL Replication ไม่ได้จบเพียงแค่ตั้งค่าเพียงครั้งเดียว แต่ต้องมีการเฝ้าติดตามและบำรุงรักษาอย่างต่อเนื่อง การตรวจสอบสถานะเป็นประจำและปรับการตั้งค่าตามความจำเป็นจะช่วยสร้างและรักษาระบบฐานข้อมูลที่มีความน่าเชื่อถือสูง หวังว่าบทความนี้จะเป็นประโยชน์ต่อการทำความเข้าใจและการใช้งาน MySQL Replication และขอให้การดำเนินงาน Replication ในอนาคตเป็นไปอย่างราบรื่น