Episode ini mengajarkan pendekatan terstruktur saat pgBackRest bermasalah: menaikkan log level dengan --log-level-console=debug dan --log-level-file=debug, membaca /var/log/pgbackrest/, serta menangani empat kasus paling umum — archive-push gagal, permission denied, repository penuh, dan version mismatch.

Di episode 14 kita memasang alarm — sekarang saatnya mempelajari apa yang terjadi saat alarm berbunyi. pgBackRest adalah tool yang sangat komunikatif: ia menulis log detail ke file dan bisa menampilkan debug lengkap di console. Masalah sebenarnya bukan "error muncul", melainkan membaca error dengan cara yang benar — dan di episode 15 kita melatih itu dengan empat kasus paling umum di lapangan.
Pola pikir yang perlu dipegang: setiap error pgBackRest menyebutkan file dan proses yang terlibat. Debugging yang baik adalah mengikuti jejak itu, bukan menebak.
pgBackRest memiliki dua jalur log: console (stdout/stderr saat perintah dijalankan) dan file (di /var/log/pgbackrest/). Keduanya bisa diatur levelnya secara independen:
sudo -u postgres pgbackrest --stanza=main --log-level-console=debug backup --type=diffsudo -u postgres pgbackrest --stanza=main --log-level-file=debug backup --type=diffLevel yang tersedia: off, error, warn, info, detail, debug, trace. Untuk troubleshooting, debug biasanya cukup; trace sangat verbose dan hanya untuk kasus ekstrem.
Tip
Gunakan --log-level-console=debug untuk insiden interaktif dan --log-level-file=debug untuk investigasi yang berlangsung lama. Di production, jangan biarkan log-level-file=debug permanen — log akan membengkak. Naikkan saat investigasi, turunkan setelah selesai.
Log file disimpan per proses dengan nama berisi timestamp dan PID:
ls -lt /var/log/pgbackrest/
sudo tail -50 /var/log/pgbackrest/pgbackrest-20260813-120000.logFormat baris log: level, process (P00 = master, P01+ = worker), dan pesan. Perhatikan pola berikut saat error:
P00 ... ERROR: [046]: ... — error dengan kode; [046] dst. adalah kategori yang didokumentasikan di pgbackrest.org.P01 ... ERROR: ... while processing file ... — menunjukkan file spesifik yang gagal.DETAIL dan HINT — penjelasan dan saran perbaikan.WAL tidak pernah masuk repository; pg_stat_archiver.failed_count naik; check gagal di bagian archive-push.
sudo -u postgres pgbackrest --stanza=main --log-level-console=debug check
tail -30 /var/log/postgresql/*.log | grep -i archiveError paling umum dan solusinya:
archive_command salah path binary: pastikan pgbackrest ada di PATH user postgres, atau tulis path absolut.archive_command belum diaktifkan: archive_mode=on butuh restart (episode 6).stanza-create dulu.Jika error menyebutkan kode dan file WAL, tes archive-push manual dengan file uji:
sudo -u postgres pgbackrest --stanza=main archive-push /var/lib/postgresql/16/main/pg_wal/0000000100000000000000FFpermission denied muncul di log — biasanya saat backup pertama kali dijalankan sebagai user yang salah, atau setelah direktori dibuat ulang.
ls -ld /var/lib/pgbackrest /var/lib/pgbackrest/backup /var/log/pgbackrest
ls -ld /var/lib/postgresql/16/mainPerbaikan:
sudo chown -R postgres:postgres /var/lib/pgbackrest
sudo chown -R postgres:postgres /var/log/pgbackrestMenjalankan pgbackrest sebagai root untuk backup lokal. Saat archive-push dijalankan oleh server (user postgres), akses ke repository yang dibuat root justru gagal. Selalu konsisten: backup lokal = user postgres, atau user khusus dengan akses repository yang sama.
Warning
Permission denied yang "muncul lalu hilang" biasanya soal user yang berbeda: backup berhasil saat dijalankan manual sebagai postgres, tapi gagal dari cron karena user atau PATH berbeda. Pastikan jadwal (episode 10) memakai user yang sama dengan pengujian manual.
archive-push mulai gagal; df -h menunjukkan repository 100%. Backup gagal di tengah jalan karena tidak ada ruang.
repo1-retention-archive tidak diterapkan (episode 10)..tmp dari backup yang terputus bisa menyumbat ruang:sudo find /var/lib/pgbackrest -name "*.tmp" -size +100Marchive-push yang tertunda otomatis berjalan ulang oleh PostgreSQL — WAL yang gagal tidak hilang, hanya menunggu.Error seperti db version ... does not match ... atau stanza already exists. Ini muncul saat versi pgBackRest atau PostgreSQL tidak cocok dengan yang tercatat di stanza.
stanza-upgrade untuk memperbarui metadata stanza:sudo -u postgres pgbackrest --stanza=main stanza-upgradecheck setelah upgrade.Note
Version mismatch yang paling membingungkan biasanya terjadi setelah restore: konfigurasi lama di PGDATA (hasil restore) tidak sinkron dengan environment baru. Selalu bandingkan pgbackrest version di kedua sisi dan identitas cluster via pgbackrest info setelah restore.
Ketika error datang, ikuti urutan ini tanpa lompat:
--log-level-console=debug./var/log/pgbackrest/ untuk konteks yang tidak terlihat di console.Inti yang harus dibawa pulang:
--log-level-console=debug untuk insiden interaktif; --log-level-file=debug untuk investigasi panjang./var/log/pgbackrest/ berisi kode error, DETAIL, dan HINT.archive_mode, dan stanza..tmp.stanza-upgrade untuk upgrade PostgreSQL, jangan hapus stanza paksa.Di episode 16 selanjutnya kita akan membuktikan backup kalian benar-benar bisa dipulihkan: testing restore (drill) — melakukan restore test berkala ke instance terpisah, memvalidasi data (checksum, row count), mengotomatiskan drill dengan script + report, dan mendokumentasikan runbook. Backup yang tidak pernah diuji adalah harapan yang disamarkan sebagai rencana!