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-id | Identitas server bisa berupa apapun asal tidak boleh sama dengan server yang lain untuk membedakan, harus di hapus ‘#’ |
log_bin | File untuk menyimpan log, biasanya /var/log/mysql/mysql-bin.log |
binlog_do_db | Database yang akan di replikasi, jika lebih dari 1 cukup dengan menyalin barisnya |
bind-address | IP 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_USER
, MASTER_PASSWORD
, MASTER_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_USER
, MASTER_PASSWORD
, MASTER_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 : Julian's | 169 views