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

6 responses to “MySQL Database Replication Trick

  1. jurmansyah June 8, 2012 at 4:09 pm

    Nice info..
    Kalau setting supaya write ke master dan read ke server slave..gimana caranya ya mas?

  2. jaka June 18, 2012 at 11:19 am

    Salam Kenal Ya Untuk Semuanya..🙂

  3. salman December 8, 2012 at 12:16 pm

    Mas klo cara replication banyak db gmana?

    • karfianto February 5, 2013 at 10:37 am

      Menurut saya, cara pertama bisa replikasi dari DB Enginenya. seperti cara di atas yang diimplementasikan ke semua database yang ingin di replikasi. Tetapi kalau cukup merepotkan, bisa dengan replikasi via block-device dengan tools sync/backup yang enterprise atau opensource. Jadi yang di-mirroring adalah (folder) data filenya.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: