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. Berikut adalah ilustrasi sederhana bagaimana replication bekerja.

MySQL-Master-Slave-Replication

Tutorial ini mencakup contoh dasar replikasi MySQL Master/Slave dengan satu server sebagai master dan satu server sebagai slave pada Debian 10. MariaDB adalah implementasi default MySQL di Debian. Langkah-langkah yang sama berlaku untuk Oracle MySQL.

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

Prasyarat

Kami berasumsi bahwa Anda memiliki dua server yang menjalankan Debian 10, berkomunikasi satu sama lain melalui private network. Jika penyedia hosting Anda tidak mendukung private IP, Anda tetap dapat menggunakan alamat IP public dan mengonfigurasi firewall Anda untuk mengizinkan lalu lintas di port 3306 hanya dari sumber tepercaya.

Server yang digunakan dalam contoh ini memiliki alamat IP berikut:

Master IP: 10.10.8.12
Slave IP:  10.10.8.164

Install MariaDB

MariaDB di Repositori Default 10 Debian adalah MariaDB versi 10.3. Opsi terbaik adalah menginstal versi MariaDB yang sama di kedua server untuk menghindari kemungkinan masalah.

Instal MariaDB pada master dan slave dengan menjalankan perintah berikut:

sudo apt-get update
sudo apt-get install mariadb-server

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

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
bind-address           = 10.10.8.12
server-id              = 1
log_bin                = /var/log/mysql/mysql-bin.log

Setelah selesai, restart layanan mariadb agar perubahan diterapkan

sudo systemctl restart mariadb

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

sudo mysql

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'@'10.10.8.164' IDENTIFIED BY 'g4nt1_d3N9an_P4$$w0rd';
GRANT REPLICATION SLAVE ON *.* TO 'replica'@'10.10.8.164';

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 binary.

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

Perhatikan nilai yang keluar, ‘mysql-bin.000001’ dan position ‘328. 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 MariaDB dan edit baris berikut :

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
bind-address           = 10.10.8.164
server-id              = 2
log_bin                = /var/log/mysql/mysql-bin.log

Simpan dan tutup text editor nano dan Restart layanan MariaDB:

sudo systemctl restart mariadb

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

sudo mysql

Pertama, hentikan threads server slave dengan perintah :

STOP SLAVE;

Jalankan query berikut yang akan mengatur slave untuk mereplikasi master:

CHANGE MASTER TO
MASTER_HOST='10.10.8.12',
MASTER_USER='replica',
MASTER_PASSWORD='replica_password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=328;

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:

sudo mysql
CREATE DATABASE replicatest;

Login ke shell MySQL slave:

sudo mysql

Jalankan perintah berikut untuk list semua database.

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 MariaDB Master / Slave pada Debian 10.