Pertemuan ke-4: Backup dan Recovery di PostgreSQL
Pada pertemuan ini, kita akan membahas pentingnya backup dan recovery untuk menjaga data agar aman dan dapat dipulihkan jika terjadi kegagalan sistem.
1️⃣ Pentingnya Backup dan Recovery
Sebagai seorang DBA, salah satu tugas utama adalah memastikan data aman dan dapat dipulihkan dengan cepat saat terjadi kegagalan sistem. Backup adalah salinan data yang bisa digunakan untuk memulihkan data yang hilang, sementara recovery adalah proses mengembalikan data dari backup.
2️⃣ Jenis-Jenis Backup di PostgreSQL
Ada dua jenis utama backup yang digunakan di PostgreSQL:
1. Backup Logis (Logical Backup)
Backup ini menyimpan data dalam format SQL dan biasanya digunakan untuk backup pada level database atau tabel.
Perintah:
pg_dump nama_database > backup.sql
Contoh:
pg_dump belajar_dba > belajar_dba_backup.sql
- Keuntungan: Bisa digunakan untuk memindahkan data antar server.
- Kelemahan: Tidak efisien untuk database besar karena membutuhkan waktu lebih lama.
2. Backup Fisik (Physical Backup)
Backup ini mencakup salinan dari seluruh direktori database, termasuk file-file internal PostgreSQL.
Perintah:
pg_basebackup -D /path/to/backup/directory -Ft -z
- Keuntungan: Lebih cepat dan lebih efisien, terutama untuk database besar.
- Kelemahan: Harus dilakukan dalam keadaan sistem berhenti (offline backup) atau menggunakan wal archiving untuk online backup.
3️⃣ Mengembalikan (Restore) Data dari Backup
1. Mengembalikan dari Backup Logis
Untuk mengembalikan database yang di-backup menggunakan pg_dump:
psql nama_database < backup.sql
Contoh:
psql belajar_dba < belajar_dba_backup.sql
2. Mengembalikan dari Backup Fisik
Untuk mengembalikan data dari backup fisik, salin ulang file-file data ke lokasi database yang sesuai, lalu mulai PostgreSQL kembali:
cp -r /path/to/backup/directory/* /path/to/pg_data_directory/
Kemudian, jalankan:
pg_ctl start
4️⃣ Membuat Backup Otomatis
Agar database selalu memiliki salinan cadangan yang teratur, kamu bisa membuat skrip untuk melakukan backup secara otomatis.
Contoh Skrip Backup Otomatis (menggunakan cronjob di Linux)
Misalnya, buat skrip backup.sh:
#!/bin/bash
DATE=$(date +\%Y\%m\%d\%H\%M)
pg_dump -U postgres nama_database > /path/to/backup/directory/backup_$DATE.sql
Jalankan skrip ini dengan cronjob, misalnya setiap hari pukul 2 pagi:
0 2 * * * /path/to/backup.sh
5️⃣ Mengatur WAL Archiving (Online Backup)
Jika ingin melakukan backup saat database masih berjalan (online backup), PostgreSQL menyediakan fitur WAL (Write-Ahead Logging) archiving.
Langkah-langkah untuk mengatur WAL Archiving
- Edit file konfigurasi
postgresql.conf:archive_mode = on archive_command = 'cp %p /path/to/archive/%f' - Restart PostgreSQL:
pg_ctl restart - Salin file WAL yang telah di-archive ke server cadangan.
6️⃣ Tugas Praktik
1️⃣ Lakukan backup database belajar_dba menggunakan pg_dump dan simpan dalam file SQL.
2️⃣ Restore database tersebut dari file backup SQL yang telah dibuat.
3️⃣ Coba buat backup fisik menggunakan pg_basebackup jika memungkinkan.
4️⃣ Set up cronjob untuk backup otomatis setiap hari pada pukul 2 pagi.
🎯 Kesimpulan
- Backup logis lebih fleksibel, namun lebih lambat, sementara backup fisik lebih cepat untuk database besar.
- Selalu pastikan backup rutin dilakukan untuk mencegah kehilangan data.
- WAL archiving memungkinkan online backup tanpa menghentikan server.
- Mengembalikan data dengan benar adalah kunci untuk memulihkan sistem dalam situasi darurat.
