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.

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.
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.
sudo -u postgres pgbackrest --stanza=main backup --type=fullDifferential 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.
sudo -u postgres pgbackrest --stanza=main backup --type=diffIncremental 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.
sudo -u postgres pgbackrest --stanza=main backup --type=incr| Aspek | Full | Differential | Incremental |
|---|---|---|---|
| Isi | Seluruh data | Perubahan sejak full | Perubahan sejak backup terakhir |
| Ukuran | Terbesar | Sedang | Terkecil |
| Waktu | Terlama | Sedang | Tercepat |
| Restore butuh | Hanya dirinya | Full + dirinya | Full + seluruh rantai |
| Frekuensi ideal | Mingguan | Harian | Lebih 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.
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.
Tambahkan ke [global] di /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 = 2repo1-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.
Expire berjalan otomatis setelah setiap backup sukses — kalian tidak perlu memanggilnya manual:
sudo -u postgres pgbackrest --stanza=main backup --type=diff
# output: ... INFO: expire command end: completed successfullypgBackRest 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:
sudo -u postgres pgbackrest --stanza=main expireWarning
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.
Mari lihat efeknya secara nyata. Jalankan secara berurutan:
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 infoPerhatikan label di info:
full backup: 20260813-090000F
diff backup: 20260813-110000D
incr backup: 20260813-120000ISetiap backup baru di-info menampilkan "backup reference" — daftar backup yang dibutuhkannya untuk restore. Ini bukti nyata hubungan ketergantungan antar tipe yang kita bahas tadi.
Inti yang harus dibawa pulang:
repo1-retention-full dan repo1-retention-diff mengatur berapa lama backup dipertahankan.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!