Belajar pgBackRest - Type Backup: Full, Differential, Incremental
Episode 5 of 23

Belajar pgBackRest - Type Backup: Full, Differential, Incremental

Episode ini membedah tiga tipe backup pgBackRest — full, differential, dan incremental — beserta cara kerja, ukuran, dan kapan memakai masing-masing. Kalian juga mengatur retention policy dengan repo1-retention-full dan repo1-retention-diff sehingga backup otomatis di-expire dan repository tidak pernah penuh.

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

Pendahuluan

Backup full pertama kita sudah selesai di episode 4. Pertanyaan berikutnya: apakah kita akan menjalankan --type=full setiap hari? Jawabannya: tidak. Untuk database yang terus tumbuh, full harian membuang ruang dan waktu. pgBackRest menyediakan tiga tipe backup yang disusun berjenjang, dan episode 5 membedah bagaimana masing-masing bekerja, kapan dipakai, serta bagaimana retention policy menyapu backup lama secara otomatis.

Bayangkan arsip kantor: full adalah fotokopi seluruh dokumen, differential adalah fotokopi semua yang berubah sejak fotokopi penuh terakhir, dan incremental adalah catatan perubahan sejak aktivitas fotokopi terakhir — sekecil apa pun itu.

Tiga Tipe Backup

Full: Fondasi Segalanya

Full menyalin semua file data cluster tanpa kecuali. Ini satu-satunya backup yang mandiri — ia tidak bergantung pada backup lain untuk restore. Ukurannya paling besar dan waktunya paling lama, karena itu jarang dijalankan — biasanya seminggu sekali.

Backup full
sudo -u postgres pgbackrest --stanza=main backup --type=full

Differential: Perubahan Sejak Full Terakhir

Differential menyimpan semua perubahan sejak full backup terakhir, apa pun yang terjadi di antaranya. Karena basis acuannya selalu full, rantai differential pendek dan restorenya sederhana: cukup full + differential terakhir.

Backup differential
sudo -u postgres pgbackrest --stanza=main backup --type=diff

Incremental: Perubahan Sejak Backup Terakhir

Incremental hanya menyimpan perubahan sejak backup apa pun yang terakhir — bisa incremental sebelumnya. Konsekuensinya rantai menjadi panjang dan berjenjang; restore incremental membutuhkan full + seluruh rantai incremental setelahnya.

Backup incremental
sudo -u postgres pgbackrest --stanza=main backup --type=incr

Membandingkan Ketiganya

AspekFullDifferentialIncremental
IsiSeluruh dataPerubahan sejak fullPerubahan sejak backup terakhir
UkuranTerbesarSedangTerkecil
WaktuTerlamaSedangTercepat
Restore butuhHanya dirinyaFull + dirinyaFull + seluruh rantai
Frekuensi idealMingguanHarianLebih sering / data besar

Note

Incremental mungkin kecil, tetapi setiap incremental menambah satu tautan di rantai restore. Terlalu banyak incremental membuat restore jadi lambat dan rawan bila satu tautan rusak. Inilah alasan pola klasik: full mingguan + differential harian — rantai pendek, ruang hemat.

Retention Policy

Mengapa Retention Diperlukan

Tanpa retention, repository membengkak tanpa batas: setiap full menyimpan ulang seluruh data, ditambah WAL yang terus mengalir. Retention adalah kebijakan yang menentukan "seberapa jauh ke belakang" backup harus dipertahankan — selebihnya di-expire otomatis.

Konfigurasi Retention

Tambahkan ke [global] di /etc/pgbackrest.conf:

/etc/pgbackrest.conf
[global]
repo1-path = /var/lib/pgbackrest
repo1-retention-full = 2
repo1-retention-diff = 5
repo1-retention-archive-type = full
repo1-retention-archive = 2
  • repo1-retention-full = 2 — selalu sisakan minimal 2 full backup.
  • repo1-retention-diff = 5 — sisakan differential yang merujuk ke full terakhir; differential dari full yang lebih lama di-expire.
  • repo1-retention-archive-type = full + repo1-retention-archive = 2 — WAL yang dibutuhkan untuk restore sampai 2 full backup terakhir dipertahankan; WAL lebih lama ikut di-expire.

Nilai yang dipilih harus berdasarkan RPO (Recovery Point Objective) dan RTO (Recovery Time Objective) — kita bahas bagaimana menentukannya di episode 10.

Auto-Expire

Expire berjalan otomatis setelah setiap backup sukses — kalian tidak perlu memanggilnya manual:

Expire otomatis berjalan setelah backup
sudo -u postgres pgbackrest --stanza=main backup --type=diff
# output: ... INFO: expire command end: completed successfully

pgBackRest menghitung backup mana yang tidak lagi memenuhi retention, lalu menghapusnya dari repository. Penting: backup yang dibutuhkan sebagai dasar rantai tidak akan di-expire, apa pun nilai retention-nya — pgBackRest menjamin rantai selalu bisa di-restore.

Untuk menguji kebijakan tanpa menunggu jadwal, expire bisa dijalankan manual:

Expire manual
sudo -u postgres pgbackrest --stanza=main expire

Warning

Retention bukan tentang "berapa backup yang ingin kalian simpan", melainkan "seberapa mundur kalian harus bisa pulih". Jika RPO kalian 7 hari, repo1-retention-full = 1 saja bisa cukup — tetapi kalian kehilangan kemampuan pulih ke kondisi 3 minggu lalu. Tentukan kebutuhan bisnis dulu, baru angka retention.

Latihan Singkat: Membangun Rantai

Mari lihat efeknya secara nyata. Jalankan secara berurutan:

Bangun rantai backup
sudo -u postgres pgbackrest --stanza=main backup --type=full
sudo -u postgres pgbackrest --stanza=main backup --type=diff
sudo -u postgres pgbackrest --stanza=main backup --type=incr
sudo -u postgres pgbackrest info

Perhatikan label di info:

Rantai di pgbackrest info
full backup: 20260813-090000F
diff backup:  20260813-110000D
incr backup:  20260813-120000I

Setiap backup baru di-info menampilkan "backup reference" — daftar backup yang dibutuhkannya untuk restore. Ini bukti nyata hubungan ketergantungan antar tipe yang kita bahas tadi.

Penutup

Inti yang harus dibawa pulang:

  • Full = seluruh data, mandiri; Differential = perubahan sejak full; Incremental = perubahan sejak backup terakhir.
  • Rantai incremental tercepat dibuat, tetapi paling rumit di-restore.
  • repo1-retention-full dan repo1-retention-diff mengatur berapa lama backup dipertahankan.
  • Expire berjalan otomatis pasca-backup; backup dasar rantai tidak pernah dihapus.
  • Retention ditentukan oleh RPO/RTO bisnis, bukan selera penyimpanan.

Di episode 6 selanjutnya kita akan membedah WAL archiving & archive_command — cara kerja archive_mode=on, archive-push %p, archive-get saat restore, apa yang divalidasi pgbackrest check, dan kapan memakai mode async untuk mengurangi latensi pada workload tulis tinggi. Ini lapisan yang membuat PITR presisi menjadi mungkin!

Belajar pgBackRest - Type Backup: Full, Differential, Incremental | Belajar pgBackRest