มีคนถามมานานแล้ว การทำ Replication แบบ MySQL Real-time ทำยัง ?
ซึ่งจริงๆแล้ว มีคู่มือในเว็บ หรือ หาอ่านได้จากกลุ่ม HOSxP ก็มีนะครับ

วันนี้เลยมารวบรวม วิธีการทำแบบที่ผมทำละกัน (อาจจะไม่แตกต่างกัน จาก อ.ท่านอื่นๆนะครับ ผมก็ไปศึกษาจาก อ.หลายๆท่านเหมือนกัน)
มาเริ่มกันเลย
1. มาเตรียมความพร้อมกันก่อนนะ

เตรียม server ไว้ 2 เครื่องนะครับ เราจะทำการ Master Server และอีกเครื่องคือทำ Slave Server กัน
กำหนด ip ตามตัวอย่างนี้ละกัน

Master Server
———————————–
Hostname : master-1
IP : 192.168.1.127
ID : 127

———————————–

Slave Server
———————————–
Hostname : slave-1
IP : 192.168.1.128
ID : 128

โดยทั้ง 2 เครื่อง ติดตั้ง MySQL หรือ Mariadb ไว้เรียบร้อยแล้ว และ ping หากันเจอแล้ว
และเปิด port 3306 ทั้ง 2 เครื่องด้วยนะครับ



2. อย่างแรกกำหนดคุณสมบัติที่ Master Server ก่อน

กำหนดค่าใน my.cnf (ถ้าแก้ไขเสร็จ ต้อง restart mysql ด้วย)
#ID Master server
server-id = 127
bind-address = 192.168.1.127
log_bin = mysql-bin
log-bin-index=bin-log.index
max_binlog_size=100M
binlog_format=row
expire_logs_days=3
log_bin_trust_function_creators = 1

เสร็จแล้ว restart mariadb  แล้วตรวจสอบ สถานะ master ด้วยคำสั่ง
show master status\G
หรือถ้าหากเครื่องนี้เคยเป็น slave มาก่อน ต้องสั่ง stop slave; ก่อนด้วยนะครับ ถ้าค่อยมากำหนดมา master server ใหม่

ให้จำค่าของ File: mysql-bin.00003 และ Position: 342 ไว้ด้วยนะครับ  เพราะต้องเอาเลขนี้ไปใช้งาน

สร้าง user สำหรับให้เครื่อง Slave server เข้ามาเชื่อม

stop slave; (กรณี ถ้าเคยทำเครื่องนี้เป็น slave มาก่อน)

grant replication slave on *.* to ‘replicate_user’@’%.192.168.1.128’ identified by ‘replicate_password’;
flush privileges;

3. ต่อไปกลับไปที่ฐาน Slave Server

กำหนดค่าใน my.cnf (ถ้าแก้ไขเสร็จ ต้อง restart mysql ด้วย)
#ID Slave server
server-id = 128
bind-address = 192.168.1.128
log_bin = mysql-bin
log-bin-index=bin-log.index
max_binlog_size=100M
binlog_format=row
expire_logs_days=3
log_bin_trust_function_creators = 1

แก้ไขแล้วสั่ง restart mariadb
แล้วเข้าไป mysql สั่งคำสั่ง ต่อไปนี้

สั่งคำสั่ง stop slave; (หากเคยทำมาก่อนหน้านี้แล้ว)

สั่งคำสั่งเพื่อสร้าง Master_Host
CHANGE MASTER TO
MASTER_HOST=’192.168.1.127′,
MASTER_USER=’replicate_user’,
MASTER_PASSWORD=’replicate_password’,
MASTER_LOG_FILE=’mysql-bin.000003′,
MASTER_LOG_POS=342;

เสร็จแล้ว สั่ง start slave;     เพื่อเริ่มเชื่อมต่อฐาน Master Server
และรันคำสั่ง
show slave status\G
เพื่อดูว่า Slave_IO_Running: Yes อยู่ไหม
และดูว่า Slave_SQL_Running: Yes อยู่ไหม


ถ้าขึ้นแบบนี้แสดงว่า Slave Node ทำงานปกติ
เป็นอันเสร็จทางฝั่ง Slave Server นะครับ

4. กลับไป Master Server แล้วลองสร้างฐานข้อมูลมา 1 ฐาน แล้วกลับไปดูที่ Slave Server ว่ามีฐานที่สร้างขึ้นเมื่อกี่ด้วยหรือไม่ ถ้าขึ้นทั้ง Slave และ Master ก็แสดงว่าการทำงาน Replicate ถูกต้องแล้ว

ปล. ถ้าจะหยุดการเชื่อม Master ก็เพียงสั่งคำสัง stop slave;

เสร็จแล้ว ถ้าไม่มีอะไร error นะครับ ถ้ามี error ให้กลับไปเริ่มต้นใหม่นะครับ

– ขอบคุณที่ติดตาม แล้วพบกันใหม่ครับ

 

Loading

[MySQL Tip] การทำ Replication Master Slave แบบ real-time

12 thoughts on “[MySQL Tip] การทำ Replication Master Slave แบบ real-time

  • 08/06/2023 at 09:31
    Permalink

    ถ้าจะให้ ข้อมูลเท่ากัน จะต้อง dump data ใน master ใส่ slave ก่อนใช่ไหมครับ แล้วค่อย ทำ replication
    ขอบคุณอาจารย์ที่เสียสละ แบ่งบันความรู้ มากเลยครับ

    Reply
    • 08/06/2023 at 09:59
      Permalink

      ใช่แล้วครับ ข้อมูลจะเท่ากันครับ

      Reply
  • 08/06/2023 at 23:04
    Permalink

    ถ้า MASTER มี Database หลายตัว Slave มีหลาย Server แล้วต้องการให้ Slave แต่ละตัว Replicate เฉพาะ Database ที่เราต้องการสามารถทำได้หรือเปล่าคับ ถ้าทำได้มีวิธีการแนะนำมั๊ยครับ

    Reply
    • 09/06/2023 at 15:02
      Permalink

      ทำได้ครับ ไว้ว่างๆ จะริวิว วิธีให้นะครับ

      Reply
    • 14/06/2023 at 09:09
      Permalink

      อืม แบบนี้ก็น่าสนใจนะครับ

      Reply
  • 14/06/2023 at 09:19
    Permalink

    แบบนี้คือ replication จาก master ทุกฐานเลยป่าวครับ หรือว่าเฉพาะฐาน hos

    Reply
  • 11/08/2023 at 16:01
    Permalink

    Slave_IO_Running: No เกิดจากอะไรบ้างคะอาจารย์

    Reply
  • 01/09/2023 at 02:17
    Permalink

    Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work (or the –replicate-same-server-id option must be used on slave but this does not always make sense; please check the manual before using it).

    Reply
  • 01/09/2023 at 02:20
    Permalink

    อยากสอบถาม Error นี้หน่อยค่ะ เกิดจากสาเหตุใดได้บ้าง แล้วแก้ไขอย่างไรได้บ้างค่ะ เช็ค servier id แล้วก็ไม่ซ้ำค่ะ

    Reply
  • 12/10/2023 at 08:21
    Permalink

    สวัสดี ครับ ผมลองทำตามแล้ว ตอนนี้ฐานมันเกาะกันแล้ว (MariaDB คนละเวอร์ชัjน Master 10.10 ,Slave 10.5
    ปรากฎว่าข้อมูล Slave ไม่เท่ากับ Master คือ ฐาน Master ที่สร้างก่อนและใช้งานมาสักพักแล้วจะไม่ไปที่ slave แต่ถ้าเป็นฐานใหม่ที่ Master สร้างขึ้นใหม่ จะเห็นที่ Slave ครับ แบบนี้ควรแก้อย่างไรครับ

    Reply
    • 16/10/2023 at 09:37
      Permalink

      แบบนี้ต้องทำการโอนข้อมูลของฐาน Master ให้เท่ากับ Slave ก่อนเปิดระบบ Replicate mysql นะครับ

      Reply

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *

This site uses Akismet to reduce spam. Learn how your comment data is processed.