October 31, 2020

384 words 2 mins read

MySQL Database Replication Trick

Untuk Anda yang ingin membuat High Availability (HA) System, komponen yang perlu dibuat replikasi antara lain: * Jaringan * Sistem Operasi * Aplikasi * Database

Untuk replikasi database, ada beberapa skenario teknologi yang bisa digunakan. Host based Storage based Instance based Host based, artinya replikasi akan dilakukan oleh software tambahan yang diinstall pada OS yang khusus berfungsi untuk melakukan sinkronisasi dari host yang satu ke host yang lain. Dalam skenario ini, Anda harus meletakkan file/konten database ke dalam disk yang terpisah dengan sistem. Storage based, artinya replikasi akan dilakukan Storage-to-Storage. Untuk skenario ini dibutuhkan perangkat storage system yang memiliki fitur Volume-to-Volume Synchronization. Instance based, artinya replikasi dilakukan oleh DBMS yang Anda gunakan. Apakah itu MySQL, PostgreSQL atau yang lainnya. Saya akan memberikan contoh konfigurasi replikasi database dengan MySQL.

Misalkan: * IP Server 1 : 10.20.30.1 * IP Server 2 : 10.20.30.2 * Database Instance yang akan direplikasi : exampledb * Username untuk replikasi : slave * Password untuk replikasi : Your.Pazzword

Langkah-langkah konfigurasinya adalah sebagai berikut: * Pada Server 1 (Master) Edit file konfigurasi MySQL vi /etc/mysql/my.cnf

  • Pastikan MySQL dapat listening pada selain dari localhost (tambahkan tanda #): #bind-address = 127.0.0.1

  • Pada bagian [mysqld] tambahkan

    log-bin = /var/log/mysql/mysql-bin.log 
    binlog-do-db=exampledb 
    server-id=1 
    

    Lalu eksekusi pada shell, restart service MySQl /etc/init.d/mysql restart

Masuk ke database sebagai root

mysql -u root -p

Setelah masuk mysql>

GRANT REPLICATION SLAVE ON *.* TO 'slave'@'10.20.30.2' IDENTIFIED BY 'Your.Pazzword'; 
 FLUSH PRIVILEGES; 
USE exampledb;
SHOW MASTER STATUS; 

Hasilnya kurang lebih sebagai berikut

mysql-bin.0001 |      101 | exampledb | 

Informasi ini akan digunakan kemudian. Anda bisa keluar dari MySQL

quit;

Lalu pada Server 2 (Slave), Pada bagian [mysqld] tambahkan

server-id=2 
master-host=10.20.30.1 
master-user=slave 
master-password=Your.Pazzword 
master-connect-retry=60 
replicate-do-db=exampledb 

Lalu eksekusi pada shell, restart service MySQl

/etc/init.d/mysql restart

Masuk ke database sebagai root

mysql -u root -p

Setelah masuk pada mysql>

 SLAVE STOP; 
 CHANGE MASTER TO MASTER_HOST='10.20.30.1', MASTER_USER='slave', MASTER_PASSWORD='Your.Pazzword', MASTER_LOG_FILE='mysql-bin.0001', MASTER_LOG_POS=101; 
 START SLAVE;
 quit; 

MASTER_LOG_FILE dan MASTER_LOG_POS diisi dengan informasi yang sebelumnya tampil di Server 1. Kini, setiap kali ada perubahan record pada database exampledb di Master, akan langsung diikuti perubahan di Slave. Untuk meningkatkan keamanan, Anda juga bisa membuat access rule pada firewall, baik di sisi network maupun di sisi OS server untuk mengijinkan Port MySQL Master hanya dapat diakses dari IP Slave. Contoh pada Ubuntu:

 apt-get install ufw ufw allow from 10.50.51.2 to any port 3306
comments powered by Disqus