pg_dump ile Yedekleme
Temel Formatlar
| Format | Parametre | Özellikler |
|---|---|---|
| Plain SQL | -Fp | Okunabilir, büyük boyut |
| Custom | -Fc | Sıkıştırılmış, önerilen |
| Directory | -Fd | Paralel yedekleme |
| Tar | -Ft | Tar arşivi |
Yedekleme Örnekleri
# SQL formatında
pg_dump -U postgres myapp > myapp_backup.sql
# Custom format (önerilen)
pg_dump -U postgres -Fc myapp > myapp_backup.dump
# Sıkıştırılmış SQL
pg_dump -U postgres myapp | gzip > myapp_backup.sql.gz
# Sadece schema (yapı)
pg_dump -U postgres --schema-only myapp > schema.sql
# Sadece data
pg_dump -U postgres --data-only myapp > data.sql
# Belirli tablolar
pg_dump -U postgres -t users -t orders myapp > tables.sql
# Tablo hariç
pg_dump -U postgres --exclude-table=logs myapp > myapp.sql
Tüm Veritabanlarını Yedekle
pg_dumpall -U postgres > all_databases.sql
Geri Yükleme
SQL Dosyasından
# Mevcut veritabanına
psql -U postgres -d myapp < myapp_backup.sql
# Yeni veritabanına
createdb -U postgres myapp_new
psql -U postgres -d myapp_new < myapp_backup.sql
Custom Format'tan
# Tam geri yükleme
pg_restore -U postgres -d myapp myapp_backup.dump
# Yeni veritabanı oluşturarak
pg_restore -U postgres -C -d postgres myapp_backup.dump
# Sadece belirli tablo
pg_restore -U postgres -t users -d myapp myapp_backup.dump
# Paralel geri yükleme (hızlı)
pg_restore -U postgres -j 4 -d myapp myapp_backup.dump
Otomatik Yedekleme Script'i
#!/bin/bash
# /opt/scripts/pg_backup.sh
BACKUP_DIR="/var/backups/postgresql"
DATE=$(date +%Y%m%d_%H%M%S)
RETENTION_DAYS=7
# Tüm veritabanlarını yedekle
for DB in $(psql -U postgres -t -c "SELECT datname FROM pg_database WHERE datistemplate = false AND datname != 'postgres'"); do
pg_dump -U postgres -Fc $DB > "$BACKUP_DIR/${DB}_${DATE}.dump"
echo "Yedeklendi: ${DB}_${DATE}.dump"
done
# Eski yedekleri sil
find $BACKUP_DIR -name "*.dump" -mtime +$RETENTION_DAYS -delete
echo "$(date): Yedekleme tamamlandı" >> /var/log/pg_backup.log
Crontab'a Ekle
# Her gece 02:00
0 2 * * * /opt/scripts/pg_backup.sh 2>&1 | tee -a /var/log/pg_backup.log
Point-in-Time Recovery (PITR)
PITR ile belirli bir zamana geri dönebilirsiniz. WAL arşivleme gerektirir.
WAL Arşivleme Ayarları (postgresql.conf)
wal_level = replica
archive_mode = on
archive_command = 'cp %p /var/lib/postgresql/wal_archive/%f'