Replikasi MySQL adalah proses yang memungkinkan Anda menyalin data secara otomatis dari satu server database ke satu atau beberapa server.
MySQL mendukung sejumlah topologi replikasi dengan topologi Master/Slave menjadi salah satu topologi paling terkenal di mana satu server database bertindak sebagai master, sementara satu atau lebih server bertindak sebagai budak. Secara default, replikasi bersifat asinkron di mana master mengirimkan peristiwa yang menjelaskan modifikasi basis data ke log binernya dan slave meminta peristiwa saat sudah siap.
Dalam tutorial ini, kami akan menjelaskan cara mengatur replikasi MySQL Master/Slave dengan satu master dan satu server slave di CentOS 7. Langkah yang sama berlaku untuk MariaDB.
Jenis topologi replikasi ini paling cocok untuk menerapkan replika baca untuk penskalaan baca, pencadangan database langsung untuk pemulihan bencana, dan untuk tugas analitik.
Prasyarat #
Dalam contoh ini, kami mengasumsikan bahwa Anda memiliki dua server yang menjalankan CentOS 7, yang dapat berkomunikasi satu sama lain melalui jaringan pribadi. Jika penyedia hosting Anda tidak memberikan alamat IP pribadi, Anda dapat menggunakan alamat IP publik dan mengonfigurasi firewall untuk mengizinkan lalu lintas di port 3306 hanya dari sumber tepercaya.
Server dalam contoh ini memiliki IP berikut:
Master IP: 192.168.121.59
Slave IP: 192.168.121.14
Instal MySQL #
Repositori CentOS 7 default tidak menyertakan paket MySQL jadi kami akan menginstal MySQL dari Repositori Yum resmi mereka. Untuk menghindari masalah apa pun, 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 secara otomatis saat boot dengan:
sudo systemctl enable mysqld
sudo systemctl start mysqld
Ketika server MySQL dimulai untuk pertama kalinya, kata sandi sementara dibuat untuk pengguna root MySQL. Untuk menemukan kata sandi gunakan perintah grep berikut:
sudo grep 'temporary password' /var/log/mysqld.log
Jalankan mysql_secure_installation
perintah untuk mengatur kata sandi root baru Anda dan meningkatkan keamanan instance MySQL:
mysql_secure_installation
Masukkan kata sandi root sementara dan jawab Y
(ya) untuk semua pertanyaan.
Konfigurasi Server Master #
Pertama, kita akan mengkonfigurasi server master MySQL dan membuat perubahan berikut:
- Setel server MySQL untuk mendengarkan IP pribadi.
- Tetapkan ID server yang unik.
- Aktifkan logging biner.
Untuk melakukannya buka file konfigurasi MySQL dan tambahkan baris berikut di [mysqld]
bagian:
sudo nano /etc/my.cnf
master:/etc/my.cnfbind-address = 192.168.121.59
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 server MySQL sebagai pengguna root:
mysql -uroot -p
Dari dalam prompt MySQL, jalankan kueri SQL berikut yang akan membuat replica
pengguna dan berikan REPLICATION SLAVE
hak istimewa bagi pengguna:
CREATE USER 'replica'@'192.168.121.14' IDENTIFIED BY 'strong_password';
GRANT REPLICATION SLAVE ON *.* TO 'replica'@'192.168.121.14';
Pastikan Anda mengubah IP dengan alamat IP budak Anda. Anda dapat memberi nama pengguna sesuai keinginan. Saat masih di dalam prompt MySQL, jalankan perintah berikut yang akan mencetak nama file biner dan posisinya.
SHOW MASTER STATUS\G
*************************** 1. row ***************************
File: mysql-bin.000001
Position: 1427
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
Catat nama filenya, 'mysql-bin.000001' dan Posisi ‘1427’ . Anda akan memerlukan nilai-nilai ini saat mengonfigurasi server budak. Nilai ini mungkin akan berbeda di server Anda.
Konfigurasi Server Budak #
Seperti untuk server master di atas, kita akan membuat perubahan berikut pada server slave:
- Setel server MySQL untuk mendengarkan pada IP pribadi
- Menetapkan ID server yang unik
- Aktifkan logging biner
Buka file konfigurasi MySQL dan edit baris berikut:
sudo nano /etc/my.cnf
slave:/etc/my.cnfbind-address = 192.168.121.14
server-id = 2
log_bin = mysql-bin
Mulai ulang layanan MySQL:
sudo systemctl restart mysqld
Langkah selanjutnya adalah mengkonfigurasi parameter yang akan digunakan server budak untuk terhubung ke server master. Masuk ke shell MySQL:
mysql -uroot -p
Pertama, hentikan utas budak:
STOP SLAVE;
Jalankan kueri berikut yang akan menyiapkan budak untuk mereplikasi master:
CHANGE MASTER TO
MASTER_HOST='192.168.121.59',
MASTER_USER='replica',
MASTER_PASSWORD='strong_password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=1427;
Pastikan Anda menggunakan alamat IP, nama pengguna, dan kata sandi yang benar. Nama dan posisi file log harus sama dengan nilai yang Anda peroleh dari server master.
Setelah selesai, mulai utas budak.
START SLAVE;
Uji Konfigurasi #
Pada titik ini, Anda harus memiliki pengaturan replikasi Master/Slave yang berfungsi.
Untuk memverifikasi bahwa semuanya berfungsi seperti yang diharapkan, kami akan membuat database baru di server master:
mysql -uroot -p
CREATE DATABASE replicatest;
Masuk ke shell MySQL budak:
mysql -uroot -p
Jalankan perintah berikut untuk membuat daftar 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)