Mengapa Backup Penting?
Data adalah aset paling berharga. Tanpa backup, satu kesalahan bisa menghilangkan semua data. Backup bukan optional — ini wajib.
Jenis Backup
1. Logical Backup (pg_dump)
Menghasilkan file SQL yang berisi perintah untuk merekonstruksi database.
# Full database backup
pg_dump -h localhost -U postgres mydb > backup.sql
# Hanya schema (tanpa data)
pg_dump --schema-only mydb > schema.sql
# Hanya data (tanpa schema)
pg_dump --data-only mydb > data.sql
# Format custom (compressed, lebih fleksibel)
pg_dump -Fc mydb > backup.dump
# Restore
psql mydb < backup.sql
pg_restore -d mydb backup.dump
2. Physical Backup (File System)
Copy file data PostgreSQL secara langsung. Lebih cepat untuk database besar.
# PostgreSQL base backup
pg_basebackup -D /backup/base -Ft -z -P
# Continuous archiving (WAL)
# postgresql.conf:
archive_mode = on
archive_command = 'cp %p /backup/wal/%f'
3. Point-in-Time Recovery (PITR)
Restore database ke titik waktu tertentu menggunakan WAL (Write-Ahead Logs).
# Restore ke waktu spesifik
# recovery.conf / postgresql.conf:
restore_command = 'cp /backup/wal/%f %p'
recovery_target_time = '2024-01-15 14:30:00'
Backup Strategy
- 3-2-1 Rule: 3 copy data, 2 media berbeda, 1 offsite
- Automated: Jangan backup manual, gunakan cron/scheduled task
- Test restore: Backup yang tidak bisa di-restore = tidak ada backup
- Retention policy: Daily (7 hari), weekly (4 minggu), monthly (12 bulan)
# Cron: backup harian jam 2 pagi
0 2 * * * pg_dump -Fc mydb > /backup/daily/mydb_$(date +\%Y\%m\%d).dump
# Hapus backup lebih dari 7 hari
0 3 * * * find /backup/daily -name "*.dump" -mtime +7 -delete
Monitoring Backup
- Cek ukuran backup — jika tiba-tiba sangat kecil, mungkin ada masalah
- Alert jika backup gagal
- Test restore secara berkala (minimal 1x/bulan)