Anda di halaman 1dari 19

Praktikum Replikasi Database

pada MySQL

Hari Aspriyono, M.Kom


hariaspriyono.web.id
Replikasi Database?
Sebuah teknik atau metode menduplikasi data dari database ke database yang lain di beberapa lokasi
dengan tujuan untuk meningkatkan ketersediaan data dan meningkatkan kinerja.

Tujuannya adalah untuk meningkatkan ketersediaan sistem, meningkatkan kinerja, dan memberikan
keandalan tinggi. Dengan replikasi, perubahan data yang terjadi pada database utama secara otomatis
disalin ke database replika, sehingga memungkinkan akses cepat dan terus-menerus ke informasi yang
konsisten. Hal ini juga dapat memberikan manfaat dalam situasi pemulihan bencana, di mana database
replika dapat digunakan sebagai cadangan untuk memulihkan sistem dengan cepat setelah kegagalan.
Model Replikasi
Setidaknya ada 2 model replikasi database yang bisa kita lakukan, berikut keterangannya.

1. Master-Master: Semua server bertindak sebagai Master dan Slave. Karena jika terjadi perubahan
database di salah satu server, database pada server lain juga ikut berubah.
2. Master-Slave: Jika terjadi perubahan database pada Master, database pada Slave juga ikut
berubah. Namun, jika terjadi perubahan pada Slave, Master tidak terpengaruh.
Persiapan
1. Minimal memiliki 2 Server, masing-masing diinstall Ubuntu Server 20.04 atau yang terbaru.
Untuk latihan server dapat menggunakan komputer/laptop, atau membuat servernya di
VirtualBox, atau di VPS.
2. Tentukan IP Address masing-masing server:
a. Server 1 (10.51.129.204)
b. Server 2 (10.51.129.108)
c. Untuk latihan, kedua IP Address di sesuaikan saja dengan kondisi jaringan masing-masing.
3. Pastikan masing-masing server dapat di remote dengan SSH.
Install MySQL Server Pada Semua Server
1. Update repository dengan perintah $ sudo apt update
2. Install MySQL Server $ sudo apt -y install mysql-server
dan tunggu sampai proses instalasinya selesai
3. Pastikan MySQL sudah running, jalankan perintah $ sudo systemctl status mysql
Jika status belum running, jalankan perintah $ sudo systemctl start mysql
4. Login/Masuk ke MySQL dengan perintah $ sudo mysql
5. Membuat/Mengganti Password root dengan menjalankan perintah:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by 'Garud@1945';
Silahkan mengganti Garud@1945 dengan password yang dikehendaki, yang penting harus ada huruf besar,
huruf kecil, angka dan karakter. Pastikan password root MySQL masing-masing server sama.
6. Setelah mengganti password root berhasil, silahkan keluar dari MySQL dengan perintah: mysql> exit
7. Jalankan perintah: $ sudo mysql_secure_installation
Jika diminta password root, masukkan password yang barusan dibuat yaitu Garud@1945 dan selanjutnya
pilih no sampai terakhir.
Membuat Nama Group Replication
Lakukan di Server 1:

1. Masuk ke MySQL dengan perintah $ sudo mysql -u root -p


2. Generate UUID dengan menjalankan perintah mysql> SELECT UUID();
kemudian catat UUID, ini akan digunakan sebagai nama replikasi di konfigurasi slave server pada tahap
berikutnya.
Contoh: 8ab5bbd0-83e1-11ee-9d20-52540084694e
3. Jika UUID sudah didapatkan selanjutnya keluar dulu dari MySQL dengan perintah mysql> quit
Konfigurasi Replikasi pada Server 1
1. Menambahkan [mysqld]
konfigurasi pada file server_id=1
my.cnf, untuk bind-address=0.0.0.0
gtid_mode=ON
mengedit file my.cnf
enforce_gtid_consistency=ON
dengan menjalankan binlog_checksum=NONE
perintah $ sudo nano
/etc/mysql/my.cnf plugin_load_add='group_replication.so'
2. Masukkan konfigurasi group_replication_single_primary_mode=OFF
pada akhir baris isi file loose-group_replication_group_name=" 8ab5bbd0-83e1-11ee-9d20-52540084694e"
my.cnf
loose-group_replication_start_on_boot=ON
3. Restart MySQL loose-group_replication_local_address=" 10.51.129.204:33061"
dengan perintah: loose-group_replication_group_seeds=" 10.51.129.204:33061,10.51.129.108:33061"
$ sudo service mysql loose-group_replication_bootstrap_group=OFF
restart report_host= 10.51.129.204
Membuat Replication User dan Database Replikasi
Lakukan di Server 1:

1. Masuk ke mysql dengan user root dan password yang sesuai

Membuat Replication Users dengan beberapa perintah berikut ini:


mysql> SET SQL_LOG_BIN=0;
mysql> SET GLOBAL read_only = OFF;
mysql> CREATE USER 'replication_user'@'%' IDENTIFIED WITH mysql_native_password BY 'Garud@1945';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'%';
mysql> FLUSH PRIVILEGES;
mysql> SET SQL_LOG_BIN=1;
mysql> CHANGE MASTER TO MASTER_USER='replication_user', MASTER_PASSWORD='Garud@1945' FOR CHANNEL 'group_replication_recovery';
2. Setelah semua OK, lanjut dengan mengaktifkan pengecekan jika ada nama group yang sama dengan perintah:
mysql> SET GLOBAL group_replication_bootstrap_group=ON;
3. Start Group Replication:
mysql> START GROUP_REPLICATION;
4. Nonaktifkan kembali pengecekan nama group yang sama dengan perintah:
SET GLOBAL group_replication_bootstrap_group=OFF;
5. Verifikasi status grup replication_group_members:
SELECT MEMBER_ID, MEMBER_HOST, MEMBER_STATE FROM performance_schema.replication_group_members;
Membuat Replication User dan Database Replikasi
Buat Database Untuk Menguji Replikasi (di Server 1)
Jalankan perintah SQL Berikut ini:

-- Membuat database Ecommerce


CREATE DATABASE ecommerce;

-- Gunakan database Ecommerce


USE ecommerce;

-- Membuat tabel Kategori Produk


CREATE TABLE kategori_produk (
id_kategori INT AUTO_INCREMENT PRIMARY KEY,
nama_kategori VARCHAR(50)
);
Buat Database Untuk Menguji Replikasi (di Server 1)
-- Membuat tabel Produk
CREATE TABLE produk (
id_produk INT AUTO_INCREMENT PRIMARY KEY,
kategori_id INT,
nama_produk VARCHAR(100),
deskripsi TEXT,
harga INT(10),
stok INT(10),
FOREIGN KEY (kategori_id) REFERENCES kategori_produk(id_kategori)
ON DELETE RESTRICT ON UPDATE CASCADE
);

-- Membuat tabel Pelanggan


CREATE TABLE pelanggan (
id_pelanggan INT AUTO_INCREMENT PRIMARY KEY,
nama_pelanggan VARCHAR(50),
alamat VARCHAR(100),
email VARCHAR(100),
no_hp VARCHAR(20)
);
Buat Database Untuk Menguji Replikasi (di Server 1)
-- Membuat tabel Transaksi
CREATE TABLE transaksi (
id_transaksi INT AUTO_INCREMENT PRIMARY KEY,
pelanggan_id INT,
tanggal_transaksi DATE,
FOREIGN KEY (pelanggan_id) REFERENCES pelanggan(id_pelanggan)
ON DELETE CASCADE ON UPDATE CASCADE
);

-- Membuat tabel Detail Transaksi


CREATE TABLE detail_transaksi (
id_detail_transaksi INT AUTO_INCREMENT PRIMARY KEY,
transaksi_id INT,
produk_id INT,
jumlah INT,
sub_total INT(10),
FOREIGN KEY (transaksi_id) REFERENCES transaksi(id_transaksi)
ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (produk_id) REFERENCES produk(id_produk)
ON DELETE CASCADE
);
Buat Database Untuk Menguji Replikasi (di Server 1)
-- Membuat tabel Pengiriman
CREATE TABLE pengiriman (
id_pengiriman INT AUTO_INCREMENT PRIMARY KEY,
transaksi_id INT,
tanggal_pengiriman DATE,
status VARCHAR(50),
FOREIGN KEY (transaksi_id) REFERENCES transaksi(id_transaksi)
ON DELETE CASCADE
);

-- Membuat tabel Pembayaran


CREATE TABLE pembayaran (
id_pembayaran INT AUTO_INCREMENT PRIMARY KEY,
transaksi_id INT,
tanggal_pembayaran DATE,
jumlah_bayar INT(10),
FOREIGN KEY (transaksi_id) REFERENCES transaksi(id_transaksi)
ON DELETE CASCADE
);
Konfigurasi Server 2
1. Konfigurasi [mysqld]
dengan edit file server_id=2
bind-address=0.0.0.0
my.cnf, jalankan gtid_mode=ON
perintah: sudo enforce_gtid_consistency=ON
nano binlog_checksum=NONE
/etc/mysql/my. plugin_load_add='group_replication.so'
cnf kemudian group_replication_single_primary_mode=OFF
tambahkan loose-group_replication_group_name="8ab5bbd0-83e1-11ee-9d20-52540084694e"
konfigurasi loose-group_replication_start_on_boot=ON
disamping di loose-group_replication_local_address= "10.51.129.108:33061"
akhir baris loose-group_replication_group_seeds="10.51.129.204:33061,10.51.129.108:33
061"
2. Restart MySQL loose-group_replication_bootstrap_group=OFF
report_host=10.51.129.108
Buat Replikasi User untuk Server 2
1. Masuk ke MySQL lalu jalankan beberapa baris perintah berikut ini:
SET SQL_LOG_BIN=0;
SET GLOBAL read_only = OFF;
CREATE USER 'replication_user'@'%' IDENTIFIED WITH mysql_native_password BY
'Garud@1945';
GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'%';
FLUSH PRIVILEGES;
SET SQL_LOG_BIN=1;
CHANGE MASTER TO MASTER_USER='replication_user', MASTER_PASSWORD='Garud@1945'
FOR CHANNEL 'group_replication_recovery';

2. Setelah itu Jalankan Group Replikasi:


START GROUP_REPLICATION;
3. Cek apakah sudah masuk anggota replikasi:
SELECT MEMBER_ID, MEMBER_HOST, MEMBER_STATE FROM
performance_schema.replication_group_members;
Hasilnya ada 2 member sesuai dengan Server 1 dan
Server 2
Uji Coba Hasil Replikasi Database
Perlu dipahami bahwa sebelumnya kita telah membuat database di SERVER 1 yang kita beri nama ecommerce,
untuk itu sekarang kita cek di SERVER 2 apakah database tersebut sudah ada juga atau tidak.

1. Masuk ke MySQL SERVER 2 : mysql -u root -p


2. Ketik perintah: SHOW DATABASES; dan perhatikan di SERVER 2 otomatis ada database ecommerce
Uji Coba dengan perintah SQL Lainnya
Selamat Belajar….

Anda mungkin juga menyukai