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