MariaDB Replication gtid (Master-Slave) มี database บน master (ปิดการเชื่อมต่อ DB มี down-time)

1) Install Mariadb ทั้ง 2 เครื่อง

https://downloads.mariadb.org/mariadb/repositories/#mirror=23Media


2) เครื่อง Master

แก้ไขไฟล์ /etc/mysql/my.cnf ตามนี้

server-id เป็นตัวบอกว่าเครื่องไหนเป็น master โดยเครื่องที่เลขต่ำสุดจะเป็น master

bind-address default จะเป็น 127.0.0.1 ให้เปลี่ยนเป็น ip ของเครื่อง

bind-address = server-ip
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log

เปลี่ยน port mariadb เพื่อไม่ให้มีการเปลี่ยนแปลงของ DB ตามรูป

systemctl restart mariadb

เสร็จแล้วให้เพิ่ม user สำหรับ replication

mysql -u root -p
grant replication slave on . to replica-user@'%' identified by 'password';
flush privileges;

mysql -u root -p
SHOW MASTER STATUS\G << จดข้อมูลที่ได้ไว้

Dump database

mysqldump -u root -p --all-databases > mysql_dump.sql
scp mysql_dump.sql root@ip-slave:/root/


3) เครื่อง Slave

แก้ไขไฟล์ /etc/mysql/my.cnf ตามนี้

bind-address = server-ip
server-id = 2
log_bin = /var/log/mysql/mysql-bin.log
read_only = 1

systemctl restart mariadb

import dump from master

mysql -u root -p < mysql_dump.sql

คอนฟิก replication บนเครื่อง slave

master_log_file='ดูจากเครื่อง master ที่ให้จดไว้',
master_log_pos=ดูจากเครื่อง master ที่ให้จดไว้,

mysql -u root -p

change master to
master_host='192.168.100.13',
master_user='replica-user',
master_password='password',
master_log_file='mariadb-bin.000003',
master_log_pos=532,

4) เปลี่ยน port เครื่อง master กลับเป็นเหมือนเดิม แล้วสั่ง restart service

5) กลับไปที่เครื่อง slave

mysql -u root -p
start slave;
show slave status\G

test replication โดย สร้าง databases บน master แล้วลอง show databases บน slave

6) add gtid บน slave

stop slave
change master to
master_use_gtid=slave_pos;

start slave;
show slave status\G