Panduan Replikasi MariaDB Multi-Source Real-Time via Cloudflare Tunnel (Tanpa IP Publik)



Ketika membangun arsitektur database terdistribusi atau melakukan sinkronisasi data dari edge device (seperti Mini PC di lokasi lokal) ke laptop pengembangan/server pusat, kendala paling umum yang ditemui adalah ketiadaan IP Publik Statis.

Pada panduan teknis kali ini, kita akan mengonfigurasi Replikasi MariaDB Multi-Source Real-Time menggunakan Cloudflare Tunnel (Zero Trust TCP Access) tanpa perlu membuka port forwarding pada router lokal.

Topologi Sistem

[ Mini PC (Master) ] ---> (MariaDB :3306)
        │
        ▼
[ Cloudflare Tunnel Client ] ---> [ Cloudflare Zero Trust Network ] (db.domain.id)
                                            │
                                            ▼
[ Laptop (Replica) ] <--- access="" cloudflared="" code="" mariadb="" tcp="">

Bagian A: Konfigurasi Master (Mini PC)

1. Setup Cloudflare Tunnel (Zero Trust Dashboard)

Masuk ke Zero Trust Dashboard dan tambahkan Public Hostname dengan parameter berikut:

  • Public Hostname: db.domain.id
  • Service Type: TCP
  • URL Target: localhost:3306 (diarahkan ke Service MariaDB lokal)

2. Persiapan Folder Binary Log di OS

Buka terminal Mini PC, buat folder penampung binary log dan atur kepemilikan user ke mysql:

sudo mkdir -p /var/log/mysql
sudo chown -R mysql:mysql /var/log/mysql
sudo chmod 750 /var/log/mysql

3. Konfigurasi MariaDB Master

Edit file konfigurasi MariaDB di /etc/mysql/mariadb.conf.d/50-server.cnf:

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

Tambahkan parameter berikut di bawah blok [mysqld]:

[mysqld]
server-id        = 1
log_bin          = /var/log/mysql/mariadb-bin.log
binlog_format    = ROW
expire_logs_days = 7

Simpan file, lalu restart service MariaDB:

sudo systemctl restart mariadb

4. Pembuatan User Replikasi

Jalankan query SQL berikut untuk membuat user replikasi. Buat otentikasi untuk host %, localhost, dan 127.0.0.1 (karena lalu lintas dari tunnel diidentifikasi masuk via interface loopback):

CREATE USER IF NOT EXISTS 'repl_user'@'%' IDENTIFIED BY 'PasswordMasterAnda';
CREATE USER IF NOT EXISTS 'repl_user'@'localhost' IDENTIFIED BY 'PasswordMasterAnda';
CREATE USER IF NOT EXISTS 'repl_user'@'127.0.0.1' IDENTIFIED BY 'PasswordMasterAnda';

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl_user'@'%';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl_user'@'localhost';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl_user'@'127.0.0.1';

FLUSH PRIVILEGES;

5. Verifikasi Status Log Master

Periksa posisi log biner aktif dengan query:

SHOW MASTER STATUS;
Catatan Penting:
Catat nama file di kolom File (contoh: mariadb-bin.000001) dan nomor di kolom Position (contoh: 70661). Nilai ini dibutuhkan saat menyambungkan Replica di Laptop.

Bagian B: Konfigurasi Replica (Laptop)

1. Konfigurasi Filter & Multi-Source Replikasi

Edit file konfigurasi MariaDB di Laptop (/etc/mysql/mariadb.conf.d/50-server.cnf):

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

Tambahkan baris berikut di bawah blok [mysqld]:

[mysqld]
server-id       = 2
read_only       = 1

# Format: nama_koneksi.replicate_rewrite_db = db_sumber->db_tujuan
minipc_1.replicate_rewrite_db = tes_replikasi->tes_replikasi_pc1

# 2. FILTER: Hanya terima database hasil belokan (semua database lain akan otomatis dibuang/diabaikan) minipc_1.replicate_do_db = tes_replikasi_pc1

Restart service MariaDB Laptop:

sudo systemctl restart mariadb

2. Aktifkan Listener Cloudflare Access TCP

Jalankan perintah ini di terminal Laptop untuk menjembatani domain remote ke port lokal (contoh: port 3307):

cloudflared access tcp --hostname db.domain.id --url 127.0.0.1:3307

3. Sinkronisasi Data Awal

  • Ekspor Data Master: Buka phpMyAdmin / Terminal di Mini PC > Export database tes_replikasi ke format .sql.
  • Impor ke Laptop: Buat database baru bernama tes_replikasi_pc1 di Laptop > Import file .sql tersebut.

4. Hubungkan Channel Replikasi

Buka SQL tab di phpMyAdmin Laptop atau terminal MariaDB, lalu jalankan query:

STOP SLAVE 'minipc_1';
RESET SLAVE 'minipc_1';

CHANGE MASTER 'minipc_1' TO
  MASTER_HOST='127.0.0.1',
  MASTER_PORT=3307,
  MASTER_USER='repl_user',
  MASTER_PASSWORD='PasswordMasterAnda',
  MASTER_LOG_FILE='mariadb-bin.000001',
  MASTER_LOG_POS=70661,
  MASTER_SSL=0;

START SLAVE 'minipc_1';

Verifikasi & Pengujian Real-Time

Jalankan perintah berikut pada MariaDB Laptop untuk mengecek status saluran replikasi:

SHOW SLAVE 'minipc_1' STATUS;

Pastikan parameter utama bernilai:

  • Slave_IO_Running: Yes
  • Slave_SQL_Running: Yes
  • Replicate_Rewrite_DB: tes_replikasi -> tes_replikasi_pc1

Prosedur Pengujian Sinkronisasi:

  1. Uji Tambah Data: Masukkan 1 baris data baru pada database di Mini PC. Data akan langsung terduplikasi ke Laptop secara instant.
  2. Uji Database Filter: Buat tabel baru pada database lain di Mini PC. Tabel tersebut tidak akan masuk ke Laptop karena tidak terdaftar pada filter replicate_rewrite_db.
Tips Troubleshooting:
Jika status Slave_IO_Running bernilai Connecting atau No, pastikan service cloudflared access tcp di Laptop masih aktif running di terminal background dan port 3307 tidak terhalang firewall/UFW.