Tag Archives: database

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 pada 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:

+------------------+----------+---------------+------------------+
| File             | Position | Binlog_Do_DB  | Binlog_Ignore_DB |
+------------------+----------+---------------+------------------+
| mysql-bin.0001   |      101 | exampledb     |                  |
+------------------+----------+---------------+------------------+
1 row in set (0.00 sec)

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
%d bloggers like this: