Cara Konfigurasi MySql 5.7 Replication Master-Master

Replikasi adalah proses dimana suata data yang tersimpan di dalam database MySql akan otomatis ter-copy secara live ke server  kedua (backup). Cara ini dinamakan proses replikasi master-slave, namun cara ini kurang sipp karena apabila master mati maka apabila ada perubahan pada slave server tidak akan berpengaruh pada master server. Karena itu replikasi master-master adalah cara terbaik untuk menghindari masalah tersebut. Namun sebelum melangkah ke metode ini, pastikan sudah memahami cara untuk mereplikasi dengan metode master-slave.

Persiapan

Disini kita akan menggunakan 2 VM Ubuntu server 17.04.

Server A – MySQL 1
Hostname: mysql-1
IP: 172.19.0.1

Server B – MySQL 2
Hostname: mysql-2
IP: 172.19.0.2

Step 1 – Install dan Konfigurasi MySQL di Server A

Install paket mysql-server dan mysql-client dengan command:

sudo apt install mysql-server mysql-client

Secara default, mysql hanya listen di lokal (127.0.0.1) saja, itu artinya tidak bisa dari luar. Kita harus mengubah dan mengkonfigurasi file /etc/mysql/mysql.conf.d/mysqld.cnf di Server A agar nanti proses replikasi bisa berjalan dengan baik. Beberapa baris yang perlu di edit:

#server-id              = 1
#log_bin                = /var/log/mysql/mysql-bin.log
#binlog_do_db           = include_database_name
bind-address            = 127.0.0.1

Hapus semua tag ‘#’ kemudian beri tag ‘#’atau ganti dengan private IP pada bind-address. Sehingga menjadi seperti ini:

server-id               = 1
log_bin                 = /var/log/mysql/mysql-bin.log
binlog_do_db            = db_belajarsys
# bind-address          = 127.0.0.1
server-idIdentitas server bisa berupa apapun asal tidak boleh sama dengan server yang lain untuk membedakan, harus di hapus ‘#’
log_binFile untuk menyimpan log, biasanya /var/log/mysql/mysql-bin.log
binlog_do_dbDatabase yang akan di replikasi, jika lebih dari 1 cukup dengan menyalin barisnya
bind-addressIP yang diperbolehkan untuk menerima koneksi, jika ip loopback 127.0.0.1 maka tidak akan bisa menerima koneksi dari internet

Sekarang restart service mysql:

sudo systemctl restart mysql.service

Kemudian masuk ke mysql melalui terminal:

mysql -u root -p

Kita harus membuat pseudo-user yang nanti akan mereplikasi database antara 2 server. Misal kita akan membuat user ‘replicator’ dengan password ‘belajar123’.

create user 'replicator'@'%' identified by 'belajar123';

Buat juga database yang akan di replikasi.

create database db_belajarsys;

Kemudian berikan permission ke user agar bisa mereplikasi database:

grant replication slave on *.* to 'replicator'@'%';

Permission hanya diberikan per database saja dan bukan keseluruhan. User hanya akan bisa mereplikasi database sesuai dengan permissionnya.

Konfigurasi yang terakhir adalah kita harus mengetahui informasi mengenai status master mysql yang nanti akan dibutuhkan untuk konfigurasi Server B.

show master status;
+------------------+----------+---------------+------------------+
| File             | Position | Binlog_Do_DB  | Binlog_Ignore_DB |
+------------------+----------+---------------+------------------+
| mysql-bin.000001 |      107 | db_belajarsys |                  |
+------------------+----------+---------------+------------------+
1 row in set (0.00 sec)

Bagian yang perlu dicatat adalah File dan Position.

Step 2 – Install dan Konfigurasi MySQL di Server B

Install juga MySql server di Server B sama seperti pada Server A.

sudo apt install mysql-server mysql-client

Setelah terinstall, konfigurasikan sama seperti pada Server A. Edit file /etc/mysql/mysql.conf.d/mysqld.cnf.

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Yang berbeda adalah pada baris server-id.

server-id              = 2
log_bin                = /var/log/mysql/mysql-bin.log
binlog_do_db           = db_belajarsys
# bind-address         = 127.0.0.1

server-id tidak boleh sama dan harus memiliki angka yang berbeda.

Seteleh itu restart service mysql:

sudo systemctl restart mysql.service

Sekarang tinggal masuk ke mysql shell.

mysql -u root -p 

Sama seperti pada Server A, kita harus membuat pseudo-user yang nanti akan mereplikasi database antara 2 server. Misal kita akan membuat user yang sama dengan Server A yaitu ‘replicator’ dengan password ‘belajar123’.

create user 'replicator'@'%' identified by 'belajar123'; 

Buat juga database yang sama.

create database db_belajarsys; 

Kemudian berikan permission ke user agar bisa mereplikasi database.

grant replication slave on *.* to 'replicator'@'%'; 

Sekarang tinggal konfigurasi replikasinya. Server B akan dikonfigurasi sebagai Slave Server. Untuk mengaktifkan replikasi dari Server A ke Server B dengan cara berikut:

stop slave; 
CHANGE MASTER TO MASTER_HOST = '172.19.0.1', MASTER_USER = 'replicator', MASTER_PASSWORD = 'belajar123', MASTER_LOG_FILE = 'mysql-bin.000001', MASTER_LOG_POS = 107; 
start slave; 

Ganti MASTER_USERMASTER_PASSWORDMASTER_LOG_FILE, dan MASTER_LOG_POS sesuaikan dengan informasi yang ada pada Server A. Valuenya mungkin bisa berbeda dengan yang Anda konfig.

Karena kita akan menjadikan replikasi Master-Master, berarti Server B juga akan dijadikan sebagai Master server. Kita harus mengetahui informasi mengenai status master mysql yang nanti akan dibutuhkan.

show master status; 
+------------------+----------+---------------+------------------+
| File             | Position | Binlog_Do_DB  | Binlog_Ignore_DB |
+------------------+----------+---------------+------------------+
| mysql-bin.000004 |      107 | db_belajarsys |                  |
+------------------+----------+---------------+------------------+
1 row in set (0.00 sec)

Bagian yang perlu dicatat adalah File dan Position.

Step 3 – Konfigurasi Slave Server di Server A

Server A harus dijadikan sebagai slave server juga jika ingin menggunakan metode Master-Master Replication, karena nanti Server B juga akan bertindak sebagai Master Server sama seperti Server A. Jadi kedua server memiliki fungsi sebagai Master dan Slave.

Konfigurasinya sama seperti pada Server B, kita harus masuk dulu ke mysql shell.

stop slave; 
CHANGE MASTER TO MASTER_HOST = '172.19.0.1', MASTER_USER = 'replicator', MASTER_PASSWORD = 'belajar123', MASTER_LOG_FILE = 'mysql-bin.000004', MASTER_LOG_POS = 107; 
start slave; 

Ganti MASTER_USERMASTER_PASSWORDMASTER_LOG_FILE, dan MASTER_LOG_POS sesuaikan dengan informasi yang ada pada Server B. Valuenya mungkin bisa berbeda dengan yang Anda konfig.

Jika di enter, pastikan outputnya seperti ini:

Query OK, 0 rows affected (0.01 sec)

Step 4 – Testing Replikasi Master-Master pada Server A dan B

Jika sudah melakukan 3 step di atas, sekarang saat untuk melakukan pengetesan pada konfigurasi yang sudah kita buat. Kita akan mencoba untuk membuat table, showing table, dan menghapus table.

Membuat Table

Pertama kita coba pada Server A, berarti Server B akan bertindak sebagai Slave Server. Buat table kosong pada database db_belajarsys seperti ini:

create table db_belajarsys.table_kosong (`id` varchar(10)); 

Menampilkan Table

Kemudian cek pada Server B.

show tables in db_belajarsys; 

Jika proses replikasi berhasil outputnya akan seperti ini:

+-------------------------+
| Tables_in_db_belajarsys |
+-------------------------+
| table_kosong            |
+-------------------------+
1 row in set (0.00 sec)

Menghapus Table

Kemudian kita akan mencoba untuk menghapus table. Kita akan mencoba menghapusnya dari Server B, maka Server A akan gantian bertindak sebagai Slave Server.

Kita akan menghapus table_kosong yang ada pada database db_belajarsys

DROP TABLE db_belajarsys.table_kosong; 

Menampilkan Table

Yang terakhir, untuk memastikan bahwa proses replikasi sudah berjalan di Server A, cek table yang ada pada database di Server A.

show tables in db_belajarsys;

Jika command itu dijalankan pastikan outputnya seperti ini:

Empty set (0.00 sec)

Itu artinya proses replikasi sudah berjalan dengan baik. Server A bisa bertindak sebagai Master dan Server B bisa bertindak sebagai Slave, begitu juga sebaliknya.

Source : https://www.belajarsys.net/cara-konfigurasi-mysql-replication-master-master/

Posted on: February 26, 2019, by :