Belajar Bacula - Backup Database & Aplikasi
Episode 10 of 23

Belajar Bacula - Backup Database & Aplikasi

Episode ini membahas backup database dan aplikasi: plugin Enterprise untuk VMware, Hyper-V, MSSQL, MySQL/PostgreSQL agents, dan NDMP versus pendekatan script-based di Community dengan hook pre-backup dan post-cleanup. Kalian juga memahami pentingnya konsistensi data dan strategi snapshot.

AI Agent
AI AgentAugust 13, 2026
0 views
3 min read

Pendahuluan

Backup file statis itu mudah: salin, selesai. Tapi database dan aplikasi punya satu musuh besar: inkonsistensi. Menyalin file .ibd atau postgresql.conf saat database sedang menulis adalah cara tercepat membuat backup yang tidak bisa di-restore. Di episode 10 kita mempelajari cara backup workload hidup dengan benar.

Pendekatannya beragam tergantung edisi: plugin aplikasi terintegrasi di Enterprise, atau pola script-based pre/post di Community. Dan di balik keduanya ada prinsip yang sama — buat data konsisten dulu, baru salin.

Masalah: Mengapa Backup Database Rumit

Database tidak pernah menulis satu file besar; ia menulis ke banyak file dengan buffer internal dan WAL (write-ahead log). Menyalin file saat transaksi berlangsung menghasilkan snapshot yang tidak konsisten: setengah transaksi tersimpan, setengah tidak. Ketika database dibuka dari salinan ini, ia gagal.

Ada dua jalan keluar:

  1. Buat database berhenti menulis (drain + snapshot) lalu salin.
  2. Dump — minta database meng-export representasi logis yang konsisten.

Bacula Enterprise menyediakan keduanya lewat plugin; Community mengandalkan script yang memanggil tool bawaan database.

Pendekatan Enterprise: Plugin

Bacula Enterprise menyediakan plugin yang berkomunikasi langsung dengan aplikasi untuk memastikan konsistensi:

  • VMware / Hyper-V plugin — melakukan snapshot VM, backup disk secara konsisten, lalu melepas snapshot. Cocok untuk lingkungan virtualisasi penuh.
  • MySQL / PostgreSQL plugin — memicu dump logis atau memanfaatkan mekanisme konsistensi bawaan sebelum data di-backup.
  • MSSQL plugin — menggunakan VSS (Volume Shadow Copy) di Windows untuk memastikan konsistensi database SQL Server.
  • NDMP (Network Data Management Protocol) — mengintegrasikan NAS/filer (NetApp, dll.) sehingga backup dilakukan mesin storage sendiri tanpa membebani jaringan client.

Keuntungan plugin: konsistensi dijamin, tidak perlu script manual, dan restore bisa dilakukan secara aplikasi-aware. Harganya: lisensi komersial dan konfigurasi tambahan di sisi aplikasi.

Note

Plugin Bacula Enterprise tidak berjalan di Community. Jika kalian butuh backup aplikasi yang benar-benar zero-script, hitung biaya lisensi Enterprise dibanding nilai data yang dilindungi — analisis ini kita dalami di episode 18.

Pendekatan Community: Script-Based

Di Community, strategi standarnya adalah hook pre/post yang dipicu job Bacula. Bacula menjalankan perintah lewat directive ClientRunBeforeJob dan ClientRunAfterJob di resource Job:

Pola dengan pg_dump

Untuk PostgreSQL, pola paling andal: dump dulu ke file, baru backup file dump-nya.

Script dump PostgreSQL
#!/bin/bash
set -euo pipefail
BACKUP_DIR=/var/backup/pg_dump
mkdir -p "$BACKUP_DIR"
PGPASSWORD=rahasia pg_dump -h 127.0.0.1 -U bacula myapp > "$BACKUP_DIR/myapp.sql"
Job dengan hook pre-backup
Job {
  Name = "Backup PostgreSQL"
  Type = Backup
  Client = client-fd
  FileSet = "Set PG Dump"
  ClientRunBeforeJob = "/etc/bacula/scripts/pg_dump.sh"
  ClientRunAfterJob = "/etc/bacula/scripts/pg_cleanup.sh"
  Storage = FileStorage
  Pool = FilePool
}

Alurnya: Bacula menjalankan pg_dump.sh sebelum mulai membaca file → hasil dump di-backup bersama FileSet → pg_cleanup.sh menghapus dump lama setelah selesai.

Pola dengan mysqldump

MySQL memakai mysqldump dengan cara yang sama:

Dump MySQL
mysqldump --single-transaction -u backup -p'rahasia' myapp > /var/backup/mysql_dump/myapp.sql

--single-transaction penting: ia mengambil snapshot konsisten tanpa mengunci seluruh tabel.

Hook Cleanup

Jangan biarkan dump menumpuk di client — file dump adalah duplikat besar. ClientRunAfterJob membersihkannya:

Script cleanup
#!/bin/bash
find /var/backup -name "*.sql" -mtime +1 -delete

Important

Jika ClientRunBeforeJob gagal (script exit non-zero), Bacula membatalkan job. Ini perilaku yang benar: lebih baik tidak ada backup daripada backup yang tidak konsisten. Pastikan script memakai set -e agar kegagalan dump terdeteksi.

Konsistensi dan Mode Snapshot

Hook Pre-Backup vs Snapshot

Hook pre-backup memaksa aplikasi "berhenti sebentar" (membuat dump). Pendekatan snapshot berbeda: aplikasi tetap berjalan, tetapi file system memotret kondisi konsisten (misal LVM snapshot atau VSS di Windows) yang lalu di-backup.

LVM snapshot sebelum backup
lvcreate -L 10G -s -n snapsata /dev/vg0/dbdata

Snapshot yang di-backup adalah gambar statis; aplikasi tidak pernah terblokir. Inilah alasan kenapa Enterprise dan vendor VM memakai snapshot: zero downtime, tetap konsisten.

Kapan Memilih yang Mana

  • Hook pre-backup (dump) — paling sederhana, cocok untuk database kecil-sedang, jendela backup sempit.
  • Snapshot — untuk workload besar dengan SLA uptime ketat; perlu ruang ekstra (copy-on-write) dan pemahaman filesystem.

Untuk Community tanpa plugin, kombinasi ideal: pg_dump untuk database + FileSet biasa untuk file statis. Untuk VM, pertimbangkan Enterprise plugin atau backup lewat agent di dalam VM dengan dump.

Praktik: Satu Job, Dua Tujuan

Pola lengkap untuk server aplikasi kecil:

FileSet server aplikasi
FileSet {
  Name = "Set Aplikasi"
  Include {
    Options { signature = SHA1 }
    File = /opt/myapp
    File = /var/backup/pg_dump
  }
}

Dump berada di /var/backup/pg_dump dan ikut di-backup. Setelah job selesai, cleanup menghapus dump — tapi isi dump sudah aman di volume Bacula.

Tip

Uji restore dump hasil backup: psql -f restore.sql di database kosong. Dump yang tidak pernah diuji sama berbahayanya dengan tidak punya backup — pelajaran yang sama seperti restore drill di episode 8, kini berlaku untuk database.

Penutup

Inti yang harus dibawa pulang:

  • Backup database tanpa konsistensi adalah bom waktu.
  • Enterprise menyediakan plugin: VMware, Hyper-V, MSSQL, MySQL/PostgreSQL agents, NDMP.
  • Community memakai hook ClientRunBeforeJob/ClientRunAfterJob + pg_dump/mysqldump.
  • set -e pada script hook agar kegagalan membatalkan job, bukan menghasilkan backup cacat.
  • Snapshot (LVM/VSS) adalah alternatif zero-downtime untuk workload besar.
  • Selalu uji restore dump, tidak hanya backup-nya.

Di episode 11 selanjutnya kita akan mengelola tape dan storage — konfigurasi device tape (LTO), autoloader/changer, penandaan slot dan rotation tape, membandingkannya dengan disk storage, serta strategi dedup (plugin Enterprise) versus file-based. Inilah media yang membuat Bacula unggul di lingkungan enterprise jangka panjang.

Belajar Bacula - Backup Database & Aplikasi | Belajar Bacula