MariaDB Replication gtid (Master-Slave) มี database บน master (ไม่มี 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

systemctl restart mariadb

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

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

ทำการ Dump database ไปยังเครื่อง slave

lock databases ไม่ให้มีการเขียนเพิ่มโดย

flush tables with read lock;
exit

SHOW MASTER STATUS\G << จดข้อมูลที่ได้ไว้

Dump database

mysqldump -u root -p --all-databases --lock-all-tables --events > mysql_dump.sql

unlock database

mysql -u root -p
unlock tables;
exit

ทำการ scp database ที่ dump ออกมาไปยังเครื่อง slave

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,

start slave;
show slave status\G

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

4) add gtid บน slave

stop slave
change master to
master_use_gtid=slave_pos;

start slave;
show slave status\G


Reference

https://www.server-world.info/en/note?os=Debian_10&p=mariadb&f=3