MySQL Replication Real‑time

ข้อมูลทุกอย่างจาก Master (192.168.1.100) → Replica (192.168.1.200) แบบอัตโนมัติ

Master

192.168.1.100
INSERT / UPDATE / DELETE CREATE TABLE / ALTER CREATE DATABASE
Binlog ON GTID ON

Replica

192.168.1.200
รับข้อมูลอัตโนมัติ read_only = ON
Replica_IO_Running: Yes Replica_SQL_Running: Yes
ข้อมูลไหลแบบเรียลไทม์

ขั้นตอนตั้งค่า Replication

1

แก้ไข config บน Master (192.168.1.100)

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld] server-id = 1 log_bin = /var/log/mysql/mysql-bin.log binlog_format = ROW gtid_mode = ON enforce_gtid_consistency = ON log_replica_updates = ON
บันทึกแล้ว restart: sudo systemctl restart mysql
ตรวจสอบ: SHOW VARIABLES LIKE 'gtid_mode'; → ON
2

สร้าง User replica บน Master

mysql -u root -p
CREATE USER 'replica'@'192.168.1.200' IDENTIFIED BY 'PasswordStrong123!'; GRANT REPLICATION SLAVE ON *.* TO 'replica'@'192.168.1.200'; FLUSH PRIVILEGES;
สร้าง user สำเร็จ
3

Lock และดูสถานะบน Master

FLUSH TABLES WITH READ LOCK; (เปิดไว้ ห้ามปิด)
SHOW MASTER STATUS;
บันทึก File + Position หรือใช้ GTID อัตโนมัติ
เปิดอีก terminal เพื่อ dump
4

Dump database จาก Master

mysqldump -u root -p --all-databases --single-transaction --routines --triggers --events --set-gtid-purged=ON > all.sql
scp all.sql root@192.168.1.200:/tmp/
ส่งไฟล์ไป Replica แล้ว
5

ตั้งค่า Replica (192.168.1.200)

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld] server-id = 2 relay-log = /var/log/mysql/mysql-relay-bin.log log_bin = /var/log/mysql/mysql-bin.log binlog_format = ROW gtid_mode = ON enforce_gtid_consistency = ON read_only = ON log_replica_updates = ON
restart mysql: sudo systemctl restart mysql
6

Import ฐานข้อมูลบน Replica

mysql -u root -p < /tmp/all.sql
นำเข้าข้อมูลเรียบร้อย
7

เริ่ม Replication บน Replica

mysql -u root -p
CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.1.100', SOURCE_USER='replica', SOURCE_PASSWORD='PasswordStrong123!', SOURCE_AUTO_POSITION=1; START REPLICA;
START REPLICA สำเร็จ
8

ตรวจสอบสถานะ

SHOW REPLICA STATUS\G
Replica_IO_Running: Yes , Replica_SQL_Running: Yes
พร้อมใช้งาน
9

ปลด Lock บน Master

UNLOCK TABLES;
Master กลับมาทำงานปกติ

ทดสอบแบบเร็ว

-- บน Master CREATE DATABASE testdb; USE testdb; CREATE TABLE user (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50)); INSERT INTO user(name) VALUES('hello');
-- บน Replica (อ่านได้) SHOW DATABASES; USE testdb; SELECT * FROM user;
จะเห็น 'hello' ทันที
หมายเหตุสำคัญ
  • Replication นี้เป็นแบบ ทางเดียว (Master → Replica) ไม่ควรเขียนข้อมูลที่ Replica โดยตรง (read_only=ON)
  • ถ้าต้องการให้เขียนได้ทั้งสองฝั่ง ต้องใช้ InnoDB Cluster / Group Replication ซึ่งเหมาะกับ HA
  • ถ้า Master ล่ม สามารถ Promote Replica ขึ้นเป็น Master ได้ (ต้องเปลี่ยน IP ใน App)
  • คำสั่งทั้งหมดต้องรันบน Ubuntu 24.04 + MySQL 8.3 (หรือ 8.0)
  • ตรวจสอบ firewall ต้องเปิด port 3306 ให้ Server2 เชื่อมถึง Server1
  • ถ้าเกิด error ให้ดู SHOW REPLICA STATUS\G เฉพาะ Last_Error และ Last_IO_Error
ทุก DDL / DML จะถูกส่งไป Replica อัตโนมัติ (CREATE, ALTER, DROP, INSERT, UPDATE, DELETE)
สื่อการสอนนี้ใช้โทนเขียวอ่อน พร้อมลูกเล่นแบบอินเทอร์แอคทีฟ