Kamis, 30 Agustus 2018

Syncronisasi 2 DB

Cara Setting dan syncronize MySQL Master-Master

Artikel ini merupakan salah satu langkah penting dalam membangun applikasi web multi server atau dalam bahasa inggris biasa dikenal dengan “Scaling Web Applications”. Dalam artikel ini akan kita pelajari bagaimana melakukan sinkronisasi database MySql antar server dengan konfigurasi master-master.
Kita sebut replika master-master karena perubahan di salah satu server database akan menyebabkan perubahan serupa di server lainnya. semua server dianggap sebagai master. Untuk memudahkan dalam memahaminya, kami anggap ada 2 server A dan server B dengan IP:
Server A: 111.111.111.111
Server B: 222.222.222.222

Langkah 1: Install dan setting MySQL di server A

Untuk install mySql di server A, gunakan perintah berikut:
sudo apt-get install mysql-server mysql-client
Secara default, mysql hanya akan menerima proses dari server lokal (localhost). Ada 4 baris dari isi file /etc/mysql/my.cnf yang harus kita edit agar bisa melakukan syncronisasi dan menerima proses dari server lain. Keempat baris yang harus kita edit tersebut adalah sebagai berikut:
#server-id              = 1
#log_bin                = /var/log/mysql/mysql-bin.log
#binlog_do_db           = include_database_name
bind-address            = 127.0.0.1
Hilangkan tanda pagar (#) di tiga baris yang pertama. Baris pertama menunjukkan id server, baris kedua adalah file log aktifitas mySQL, dan baris ketiga adalah nama database yang akan kita sinkronkan. Nama database bisa lebih dari satu.
Kita anggap nama database yang akan kita sinkronkan adalah contohdb, sehingga keempat baris tersebut kita edit menjadi seperti ini:
server-id              = 1
log_bin                = /var/log/mysql/mysql-bin.log
binlog_do_db           = contohdb
#bind-address          = 127.0.0.1
Simpan , lalu restart mysql dengan perintah:
sudo service mysql restart
Setelah itu kita perlu membuat user replicator. untuk melakukan hal tersebut, kita perlu login ke mysql dengan user root:
mysql -u root -p
Anda akan diminta untuk memasukkan password root mysql. gunakan password root yang anda masukkan saat anda melakukan instalasi mysql, sehingga akan muncul mysql prompt sebagai berikut:
mysql> 
Tambahkan user replicator dengan perintah berikut:
create user 'replicator'@'%' identified by 'password';
kemudian set permission untuk replika data mysql:
grant replication slave on *.* to 'replicator'@'%'; 
kemudian cek status master dengan perintah:
show master status; 
Hasilnya kurang lebih sebagai berikut:
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      107 | contohdb     |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

Langkah 2: Install dan setting MySQL di server B

Seperti yang kita lakukan di server A, install mySql dengan perintah:
sudo apt-get install mysql-server mysql-client
kemudian edit file /etc/mysql/my.cnf, ganti empat baris berikut menjadi:
server-id              = 2
log_bin                = /var/log/mysql/mysql-bin.log
binlog_do_db           = contohdb
# bind-address         = 127.0.0.1
setelah itu, restart mysql dengan perintah:
sudo service mysql restart
setelah itu, login ke mysql sebagai root:
mysql -u root -p 
Buat user replicator:
create user 'replicator'@'%' identified by 'password';  
kemudian create database contohdb:
create database contohdb;  
setelah itu, set permission:
grant replication slave on *.* to 'replicator'@'%';
kemudian, izinkan replikasi di server B dengan perintah:
slave stop; 
CHANGE MASTER TO MASTER_HOST = '111.111.111.111', MASTER_USER = 'replicator', MASTER_PASSWORD = 'password', MASTER_LOG_FILE = 'mysql-bin.000001', MASTER_LOG_POS = 107; 
slave start; 
Catatan: isi dari MASTER_LOG_FILE dan MASTER_LOG_POS mengacu pada hasil show master status; di langkah 1.
setelah itu, tampilkan status master di server B:
show master status; 
Hasilnya kira kira seperti ini:
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000005 |      109 | contohdb     |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

Langkah 3: Izinkan replikasi di server A

izinkan replikasi di server A, dengan mengacu pada hasil show master status;di langkah 2:
slave stop; 
CHANGE MASTER TO MASTER_HOST = '222.222.222.222', MASTER_USER = 'replicator', MASTER_PASSWORD = 'password', MASTER_LOG_FILE = 'mysql-bin.000005', MASTER_LOG_POS = 109; 
slave start; 

Langkah 4: Test konfigurasi

untuk mengecek apakah konfigurasi Anda berhasil atau tidak, buat database di server A dengan nama contohdb (sesuai nama yang disetting replika dilangkah 1 dan 2):
create database contohdb;
setelah itu buat table dummy:
create table contohdb.dummy (`id` varchar(10)); 
cek hasilnya di server B, apakah table yang kita buat di server A juga ikut terbentuk di server B?
show tables in contohdb;  
Hasilnya harus:
+--------------------+
| Tables_in_contohdb |
+--------------------+
| dummy              |
+--------------------+
1 row in set (0.00 sec)

Tidak ada komentar:

Posting Komentar