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