Replikasi MySQL (MySQL Replication) adalah proses yang memungkinkan Anda untuk secara otomatis menyalin data dari satu database server ke satu atau beberapa server lain.

MySQL mendukung sejumlah topologi replikasi dengan topologi Master/Slave menjadi salah satu topologi paling terkenal di mana satu server database bertindak sebagai master, sementara yang lain bertindak sebagai slave.

Secara default, konsep kerja replikasi adalah asinkron, yang artinya ketika master mengirimkan pemberitahuan tentang modifikasi database ke log binernya, maka slave akan meminta events modifikasi tersebut ketika sudah siap. Singkatnya, perubahan tidak terjadi secara langsung, terdapat jeda perubahan sekitar beberapa mili-detik dengan data asli dari master.

Dalam tutorial ini, kami akan menjelaskan cara mengatur replikasi MySQL Master/Slave dengan kofigurasi satu sebagai master dan satu lagi sebagai slave pada CentOS 7. Langkah-langkah yang sama berlaku untuk MariaDB.

Jenis topologi replikasi ini paling cocok untuk deploy replikasi dengan read database yang tinggi, backup live database untuk pemulihan bencana dan untuk pekerjaan analitik.

Kami sarankan Anda untuk menguji setiap tutorial atau panduan yang ada di Internet di virtual machine (vmware atau virtualbox) sebelum menerapkan ke server produksi, agar tidak mengacaukan sistem yang berjalan ketika ada kesalahan.

Prasyarat

Dalam contoh ini, kami mengasumsikan bahwa Anda memiliki dua server dengan ip yang berbeda dengan sistem CentOS 7, yang dapat berkomunikasi satu sama lain melalui private network.

Jika penyedia hosting Anda tidak memberikan private IP, Anda tetap dapat menggunakan alamat IP publik dan mengkonfigurasi firewall untuk mengizinkan lalu lintas di port 3306 hanya dari sumber terpercaya.

Server dalam contoh ini memiliki IP berikut:

Master IP: 192.168.121.19
Slave IP:  192.168.121.14

Instal MySQL

Repositori default CentOS 7 tidak menyertakan paket MySQL, sehingga kita akan menginstal MySQL dari Repository resmi MySQL. Untuk menghindari masalah, kami akan menginstal MySQL versi 5.7 yang sama di kedua server.

Instal MySQL di server Master dan Slave:

sudo yum localinstall https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
sudo yum install mysql-community-server

Setelah instalasi selesai, mulai layanan MySQL dan aktifkan untuk memulai otomatis saat boot dengan:

sudo systemctl enable mysqld

sudo systemctl start mysqld

Ketika MySQL server dimulai untuk pertama kalinya, kata sandi sementara dihasilkan untuk user root MySQL. Untuk menemukan kata sandi, gunakan perintah grep berikut:

sudo grep 'temporary password' /var/log/mysqld.log

Jalankan perintah mysql_secure_installation untuk mengatur kata sandi root baru dan meningkatkan keamanan instance MySQL:

mysql_secure_installation

Masukkan kata sandi root sementara dan jawab Y (yes) untuk semua pertanyaan.

Untuk penggunaan Kata sandi baru, kata sandi harus sepanjang  8 karakter (minimal) dan mengandung setidaknya satu huruf besar, huruf kecil, angka, dan karakter khusus.

Konfigurasikan Master Server

Pertama, kita akan mengkonfigurasi server MySQL master dan membuat perubahan berikut:

  • Atur server MySQL untuk listen pada private IP
  • Tetapkan ID server yang unik
  • Aktifkan binary logging

Untuk melakukannya buka file konfigurasi MySQL dan tambahkan baris berikut di bagian [mysqld]:

sudo nano /etc/my.cnf

konfigurasi /etc/my.cnf untuk server master sebagai berikut :

bind-address = 192.168.121.19

server-id = 1

log_bin = mysql-bin

Setelah selesai, restart layanan MySQL agar perubahan diterapkan

sudo systemctl restart mysqld

Langkah selanjutnya adalah membuat pengguna replikasi baru. Masuk ke MySQL server sebagai root:

mysql -u root -p

Dari dalam prompt MySQL, jalankan query SQL berikut yang akan membuat user replica dan memberikan hak akses REPLICATION SLAVE kepada user tersebut :

CREATE USER 'replica'@'192.168.121.14' IDENTIFIED BY 'ganti_dengan_password';
GRANT REPLICATION SLAVE ON *.* TO 'replica'@'192.168.121.14';

Pastikan untuk mengubah IP dengan alamat IP mesin slave Anda. Anda dapat memberi nama user dengan nama lain yang Anda inginkan.

Saat masih di dalam prompt MySQL, jalankan perintah berikut yang akan mencetak nama file dan posisi biner.

SHOW MASTER STATUS\G
*************************** 1. row ***************************
             File: mysql-bin.000001
         Position: 1326
     Binlog_Do_DB: 
 Binlog_Ignore_DB: 
Executed_Gtid_Set: 
1 row in set (0.00 sec)

Perhatikan nama file, ‘mysql-bin.000001’ dan position ‘1326’. Anda akan membutuhkan nilai-nilai ini ketika mengkonfigurasi server slave. Nilai-nilai ini mungkin akan berbeda di server Anda.

Konfigurasikan Server Slave

Seperti untuk server master di atas, kita juga akan membuat perubahan berikut ke server slave:

  • Atur server MySQL untuk listen pada private IP
  • Tetapkan ID server yang unik
  • Aktifkan binary logging

Buka file konfigurasi MySQL dan edit baris berikut :

sudo nano /etc/my.cnf
bind-address           = 192.168.121.14
server-id              = 2
log_bin                = mysql-bin

Simpan dan tutup text editor nano dan Restart layanan MySQL:

sudo systemctl restart mysqld

Langkah selanjutnya adalah mengkonfigurasi parameter yang akan digunakan server slave untuk terhubung ke server master. Login ke shell MySQL:

mysql -u root -p

Pertama, hentikan server slave threads dengan perintah :

STOP SLAVE;

Jalankan query berikut yang akan mengatur slave untuk mereplikasi master:

CHANGE MASTER TO
MASTER_HOST='192.168.121.19',
MASTER_USER='replica',
MASTER_PASSWORD='password_master',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=1326;

Pastikan Anda menggunakan alamat IP, nama user, dan kata sandi yang benar. Nama dan posisi file log harus sama dengan nilai yang Anda peroleh dari server master.

Setelah selesai, jalankan threads untuk server slave.

START SLAVE;

Pengujian Konfigurasi

Pada poin ini, Anda sudah memiliki setup replikasi Master / Slave yang berfungsi.

Untuk memverifikasi bahwa semuanya berfungsi seperti yang diharapkan, kita akan membuat database baru di server master:

mysql -u root -p
CREATE DATABASE testingreplica;

Login ke shell MySQL slave:

mysql -u root -p

kemudian list semua database MySQL :

SHOW DATABASES;

Anda akan melihat bahwa database yang Anda buat di server master direplikasi pada slave:

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| replicatest        |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

Kesimpulan

Dalam tutorial ini, kami telah menunjukkan Anda membuat replikasi MySQL Master / Slave di CentOS 7.