PostgreSQL Veritabanlarının Yedeklenmesi ve Kurtarılması: AlexHost Kullanıcıları için Tam Rehber
PostgreSQL Yedekleme Stratejisinin Düşündüğünüzden Daha Önemli Olmasının Nedenleri
Veri kaybı varsayımsal bir risk değildir — her veritabanı yöneticisinin bir noktada karşılaşacağı operasyonel bir kesinliktir. Donanım arızaları, yanlışlıkla yapılan silmeler, bozuk işlemler ve fidye yazılımı saldırıları, bir üretim ortamını saniyeler içinde çökertebilir. PostgreSQL kullanıcıları için, sağlam, test edilmiş ve otomatik bir yedekleme stratejisine sahip olmak, küçük bir olay ile felaket niteliğinde bir iş başarısızlığı arasındaki farktır.
AlexHost Dedicated Servers, PostgreSQL veritabanlarını barındırmak ve korumak için ideal bir temel sağlar. İstisnai I/O verimlilik sunan kurumsal sınıf NVMe SSD depolama, tam kök erişimi ve tam yapılandırma kontrolü ile birlikte yerleşik DDoS koruması, AlexHost’un ciddi veritabanı iş yükleri için gereken altyapı performansı ve güvenlik duruşunu sağlar.
Yüksek trafikli bir e-ticaret platformu, bir SaaS uygulaması, ilişkisel bir veritabanı tarafından desteklenen bir WordPress kurulumu veya özel bir kurumsal sistem çalıştırıyor olsanız da, bu kılavuz sizi her büyük PostgreSQL yedekleme ve kurtarma yöntemi aracılığıyla yürütür — basit SQL dökümleri ile gelişmiş Point-in-Time Recovery (PITR) — tümü üretim ortamları için optimize edilmiştir.
1. PostgreSQL Yedekleme Seçeneklerini Anlamak
PostgreSQL, birkaç olgun, iyi belgelenmiş yedekleme mekanizması ile birlikte gelir. Doğru olanı seçmek, veritabanı boyutunuz, kurtarma süresi hedefleri (RTO), kurtarma noktası hedefleri (RPO) ve operasyonel karmaşıklık toleransınıza bağlıdır.
| Yöntem | En İyi Kullanım | Avantajlar | Dezavantajlar |
|---|---|---|---|
SQL Dump (pg_dump) | Küçük ve orta ölçekli veritabanları | Basit, taşınabilir, insan tarafından okunabilir | Çok büyük VT’ler için yavaş |
| Özel Format Dump | Orta ve büyük veritabanları | Sıkıştırılmış, paralel geri yükleme | İkili, pg_restore gerektirir |
| Dosya Sistemi Anlık Görüntüsü | Çok büyük veritabanları | Hızlı, tutarlı | Uzmanlık gerektirir, VT sessiz olmalı veya anlık görüntü farkında olmalı |
| PITR (WAL Arşivleme) | Görev açısından kritik üretim sistemleri | Ayrıntılı zaman içinde nokta kurtarma | Karmaşık kurulum ve bakım |
Başlamadan önce bu dengeleri anlamak esastır. Çoğu üretim ortamı, örneğin gece özel format dumpları ve ayrıntılı kurtarma yeteneği için sürekli WAL arşivleme gibi en az iki yaklaşımı birleştirmekten yararlanır.
2. Ön Koşullar ve Ayrıcalık Gereksinimleri
Herhangi bir yedekleme işlemini gerçekleştirmeden önce, aşağıdaki ön koşulların yerine getirildiğini doğrulayın:
Kullanıcı Ayrıcalıkları:
- Tam bir yedekleme gerçekleştirmek için PostgreSQL superuser veya hedef veritabanının sahibi olmalısınız.
pg_dumpalliçin superuser ayrıcalıkları zorunludur.
PostgreSQL sürümünüzü doğrulayın:
psql --versionYedekleme yapmadan önce kullanılabilir disk alanını kontrol edin:
df -h /var/lib/postgresql/Yedekleme hedefinin yeterli boş alana sahip olduğundan emin olun — geçici dosyalar ve sıkıştırma ek yükünü hesaba katmak için en az yedeklenecek veritabanının boyutunun 1,5 katı.
SSH aracılığıyla sunucunuza bağlanın:
ssh root@your-server-ipVPS Hosting planı kullanıyorsanız, tam SSH erişimine ve PostgreSQL’i kısıtlama olmaksızın kurma, yapılandırma ve yönetme yeteneğine sahip olacaksınız.
3. Yöntem 1 — pg_dump ile SQL Dump
pg_dump yardımcı programı, en yaygın olarak kullanılan PostgreSQL yedekleme aracıdır. Veritabanı aktif olarak kullanılıyor olsa bile, tek bir veritabanının tutarlı bir anlık görüntüsünü oluşturur. Çıktı, herhangi bir uyumlu PostgreSQL kurulumunda incelenebilen, düzenlenebilen ve yeniden oynatılabilen düz metin SQL betiğidir.
Adım 1: Terminal Açın ve Sunucunuza Erişin
ssh root@your-alexhost-server-ipAdım 2: pg_dump Komutunu Çalıştırın
pg_dump -U username -W -F p database_name > /backups/backup_file.sqlParametre açıklaması:
| Parametre | Açıklama |
|---|---|
-U username | Yedeklemeyi gerçekleştiren PostgreSQL kullanıcısı |
-W | Parolayı etkileşimli olarak sor |
-F p | Çıktı formatı: p = düz SQL metni |
database_name | Yedeklenecek veritabanının adı |
> /backups/backup_file.sql | Çıktıyı bir dosyaya yönlendir |
Pratik örnek:
pg_dump -U postgres -W -F p my_production_db > /backups/my_production_db_$(date +%Y%m%d_%H%M%S).sql> Pro İpucu: Yedekleme dosya adınıza $(date +%Y%m%d_%H%M%S) kullanarak bir zaman damgası eklemek, önceki bir yedeklemeyi yanlışlıkla üzerine yazmanızı asla sağlamaz ve doğal bir kronolojik arşiv oluşturur.
Adım 3: Yedekleme Dosyasını Doğrulayın
ls -lh /backups/
head -50 /backups/my_production_db_*.sqlDosya, PostgreSQL başlık yorumları ve SET ifadeleriyle başlamalı ve geçerli bir dump’ın oluşturulduğunu doğrulamalıdır.
4. Method 2 — Tüm Veritabanlarını pg_dumpall ile Yedekleme
Bir PostgreSQL örneğindeki her veritabanını yedeklemeniz gerektiğinde — roller ve tablespace’ler gibi genel nesneler dahil — pg_dumpall doğru araçtır.
pg_dumpall -U postgres -W > /backups/all_databases_$(date +%Y%m%d).sqlBu komut şunları dışa aktarır:
- Tüm veritabanları
- Tüm roller (kullanıcılar ve gruplar)
- Tüm tablespace’ler
- Tüm genel yapılandırma
Önemli: pg_dumpall çıktı dosyası yoğun sunucularda çok büyük olabilir. Yedekleme bölümünüzün yeterli alana sahip olduğundan emin olun ve çıktıyı hemen sıkıştırmayı düşünün:
pg_dumpall -U postgres | gzip > /backups/all_databases_$(date +%Y%m%d).sql.gz5. Yöntem 3 — Büyük Veritabanları için Özel Format Yedekleri
Birkaç gigabaytı aşan üretim veritabanları için, özel format (-F c) düz SQL dökümleri yerine kesinlikle önerilir. Özel format yedekleri şunlardır:
- Varsayılan olarak sıkıştırılmış — depolama gereksinimlerini önemli ölçüde azaltır
- Geri yükleme açısından daha hızlı —
-jbayrağı ile paralel geri yükleme işlemlerini destekler - Seçici olarak geri yüklenebilir — bireysel tabloları veya şemaları geri yüklemenize izin verir
Özel Format Yedeklemesi Oluşturma
pg_dump -U postgres -W -F c my_production_db > /backups/my_production_db_$(date +%Y%m%d).dumpSıkıştırılmış Dizin Formatı Yedeklemesi Oluşturma (Paralelizmi Destekler)
pg_dump -U postgres -W -F d -j 4 -f /backups/my_production_db_dir my_production_db| Parametre | Açıklama |
|---|---|
-F d | Dizin formatı — tablo başına bir dosya |
-j 4 | 4 paralel çalışan işlemi kullan |
-f /path/to/dir | Çıktı dizini (henüz mevcut olmamalı) |
Bu yaklaşım, çok çekirdekli sunucularda yedekleme süresini dramatik olarak azaltır ve AlexHost’ta sunulan yüksek performanslı özel sunucu ortamları için idealdir.
6. SQL Dumplarından Geri Yükleme
Düz SQL Dumpından Tek Bir Veritabanını Geri Yükleme
Önce hedef veritabanının var olduğundan emin olun. Yoksa oluşturun:
psql -U postgres -c "CREATE DATABASE my_restored_db;"Ardından geri yükleyin:
psql -U postgres -d my_restored_db -f /backups/my_production_db_backup.sqlParametre açıklaması:
| Parametre | Açıklama |
|---|---|
-U postgres | PostgreSQL süper kullanıcısı |
-d my_restored_db | Geri yükleme için hedef veritabanı |
-f /path/to/file.sql | SQL dump dosyasının yolu |
Geri Yükleme İlerlemeşini İzleme
Büyük SQL dosyaları için pv kullanarak ilerlemeyi izleyebilirsiniz:
pv /backups/my_production_db_backup.sql | psql -U postgres -d my_restored_db7. Özel Format Dumplarından Geri Yükleme
Özel format dumpları psql yerine pg_restore yardımcı programını gerektirir.
Temel Geri Yükleme
pg_restore -U postgres -d my_restored_db /backups/my_production_db.dumpVeritabanını Otomatik Olarak Geri Yükle ve Oluştur
pg_restore öğesine veritabanını doldurmadan önce oluşturmasını söylemek için -C bayrağını kullanın:
pg_restore -U postgres -C -d postgres /backups/my_production_db.dumpDaha Hızlı Kurtarma için Paralel Geri Yükleme
pg_restore -U postgres -d my_restored_db -j 4 /backups/my_production_db_dir/-j 4 öğesini bir dizin formatı yedeklemesiyle kullanmak, dört çekirdekli bir sunucuda geri yükleme süresini %75’e kadar azaltabilir — felaket kurtarma sırasında kapalı kalma süresini en aza indirirken önemli bir avantaj.
Yalnızca Belirli Bir Tabloyu Geri Yükle
pg_restore -U postgres -d my_restored_db -t orders /backups/my_production_db.dumpBu ayrıntılı yetenek, özel formatın düz SQL dumplarına göre temel avantajlarından biridir.
8. Yöntem 4 — Sürekli Arşivleme ve Belirli Bir Zaman Noktasına Kurtarma (PITR)
PITR, görev açısından kritik PostgreSQL dağıtımları için altın standarttır. Bir temel yedek üzerine Write-Ahead Log (WAL) segmentlerini yeniden oynatarak veritabanınızı herhangi bir belirli zaman noktasına geri yükleyebilirsiniz — sadece son yedek değil. Bu, bilinen bir zaman damgasında meydana gelen mantıksal bir hatadan (örneğin, yanlışlıkla DROP TABLE) kurtulmanız gereken senaryolar için gereklidir.
Adım 1: postgresql.conf içinde WAL Arşivlemesini Etkinleştirin
PostgreSQL yapılandırma dosyasını bulun ve düzenleyin:
nano /etc/postgresql/15/main/postgresql.confAşağıdaki yönergeleri ekleyin veya değiştirin:
# Enable WAL archiving
wal_level = replica
archive_mode = on
archive_command = 'cp %p /var/lib/postgresql/wal_archive/%f'Parametre açıklaması:
| Parametre | Değer | Açıklama |
|---|---|---|
wal_level | replica | Arşivleme için yeterli WAL ayrıntısını etkinleştirir |
archive_mode | on | Arşivleme işlemini etkinleştirir |
archive_command | 'cp %p /path/%f' | WAL dosyalarını arşive kopyalamak için shell komutu |
Arşiv dizinini oluşturun ve doğru izinleri ayarlayın:
mkdir -p /var/lib/postgresql/wal_archive
chown postgres:postgres /var/lib/postgresql/wal_archive
chmod 700 /var/lib/postgresql/wal_archiveDeğişiklikleri uygulamak için PostgreSQL’i yeniden başlatın:
systemctl restart postgresqlAdım 2: pg_basebackup ile Temel Yedek Alın
pg_basebackup -U postgres -D /backups/base_backup -Ft -z -P -Xs| Parametre | Açıklama |
|---|---|
-D /backups/base_backup | Temel yedek için hedef dizin |
-Ft | Tar format çıktısı |
-z | Gzip ile sıkıştır |
-P | İlerlemeyi göster |
-Xs | Yedekleme sırasında WAL akışı |
Adım 3: Belirli Bir Zaman Noktasına Geri Yükleyin
Temel yedek ve WAL arşivlerinden geri yüklemek için:
- PostgreSQL’i durdurun:
systemctl stop postgresql- Mevcut veri dizinini temizleyin:
rm -rf /var/lib/postgresql/15/main/*- Temel yedeklemeyi çıkarın:
tar -xzf /backups/base_backup/base.tar.gz -C /var/lib/postgresql/15/main/recovery.confoluşturun (PostgreSQL 11 ve öncesi) veyapostgresql.confyapılandırın ve birrecovery.signaldosyası oluşturun (PostgreSQL 12+):
# For PostgreSQL 12+
touch /var/lib/postgresql/15/main/recovery.signalpostgresql.conf öğesine ekleyin:
restore_command = 'cp /var/lib/postgresql/wal_archive/%f %p'
recovery_target_time = '2025-01-15 14:30:00'
recovery_target_action = 'promote'- Doğru sahipliği ayarlayın ve PostgreSQL’i başlatın:
chown -R postgres:postgres /var/lib/postgresql/15/main/
systemctl start postgresqlPostgreSQL, WAL segmentlerini belirtilen zaman damgasına kadar yeniden oynatacak ve ardından normal okuma-yazma durumuna yükseltecektir.
9. Cron ile Yedeklemeleri Otomatikleştirme
Manuel yedeklemeler güvenilir değildir. Yedekleme zamanlamanızı cron ile otomatikleştirmek tutarlılığı sağlar ve insan hatası faktörünü ortadan kaldırır.
Bir Yedekleme Betiği Oluşturun
nano /usr/local/bin/pg_backup.sh#!/bin/bash
# PostgreSQL Automated Backup Script
BACKUP_DIR="/backups/postgresql"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
DB_USER="postgres"
DB_NAME="my_production_db"
RETENTION_DAYS=14
# Create backup directory if it doesn't exist
mkdir -p "$BACKUP_DIR"
# Perform the backup
pg_dump -U "$DB_USER" -F c "$DB_NAME" > "$BACKUP_DIR/${DB_NAME}_${TIMESTAMP}.dump"
# Remove backups older than retention period
find "$BACKUP_DIR" -name "*.dump" -mtime +"$RETENTION_DAYS" -delete
# Log completion
echo "[$TIMESTAMP] Backup of $DB_NAME completed successfully." >> /var/log/pg_backup.logBetiği çalıştırılabilir yapın:
chmod +x /usr/local/bin/pg_backup.shCron ile Zamanla
crontab -eHer gece saat 2:00’de yedekleme çalıştırmak için aşağıdaki satırı ekleyin:
0 2 * * * /usr/local/bin/pg_backup.shHaftalık tam yedeklemeler artı günlük artımlı WAL arşivleme için bunu önceki bölümde açıklanan PITR kurulumu ile birleştirin.
10. Yedekleri Çevrimdışı Olarak Güvenli Hale Getirme ve Depolama
Üretim veritabanınızla aynı sunucuda depolanan bir yedek gerçek bir yedek değildir — bu tek bir hata noktasıdır. Aşağıdaki güvenlik ve çevrimdışı depolama uygulamalarını uygulayın:
Aktarımdan Önce Yedekleri Şifreleyin
gpg --symmetric --cipher-algo AES256 /backups/my_production_db.dumpYedekleri rsync ile Uzak Bir Konuma Aktarın
rsync -avz --progress /backups/postgresql/ user@remote-backup-server:/remote/backups/postgresql/SSH Pipe ile pg_dump Kullanın Doğrudan Uzak Yedekleme İçin
pg_dump -U postgres my_production_db | gzip | ssh user@remote-server "cat > /backups/my_production_db_$(date +%Y%m%d).sql.gz"PostgreSQL için Güvenlik Duvarı Kuralları (UFW)
PostgreSQL bağlantı noktası erişimini yalnızca güvenilir IP’lerle sınırlayın:
ufw allow from 192.168.1.0/24 to any port 5432
ufw deny 5432
ufw enableFarklı barındırma katmanlarında birden fazla projeyi yöneten ekipler için, AlexHost Paylaşılan Web Barındırma planları da daha küçük projeler için yedekleme iş akışlarınızı tamamlayabilecek veritabanı yönetim araçlarını destekler.
11. En İyi Uygulamalar Özeti
PostgreSQL yedeklemelerini doğru şekilde uygulamak disiplin ve katmanlı bir yaklaşım gerektirir. Verilerinizin her zaman korunduğundan emin olmak için bu en iyi uygulamaları izleyin:
| Uygulama | Öneri |
|---|---|
| Yedekleme sıklığı | Minimum günlük; yüksek işlem hacimli veritabanları için saatlik |
| Yedekleme formatları | 1 GB’dan büyük veritabanları için özel format (-F c) kullanın |
| Saklama politikası | 14 günlük, 4 haftalık ve 3 aylık yedekleme tutun |
| Doğrulama | Bütünlüğü doğrulamak için aylık olarak test ortamına geri yükleyin |
| Şifreleme | Yedeklemeleri uzak aktarımdan önce her zaman şifreleyin |
| Uzak depolama | Yedeklemeleri en az bir coğrafi olarak ayrı konumda tutun |
| İzleme | Yedekleme işi başarısızlıklarında e-posta veya izleme sistemi aracılığıyla uyarı verin |
| Üretim için PITR | Tüm görev açısından kritik veritabanlarında WAL arşivlemesini etkinleştirin |
| Belgeler | Geri yükleme prosedürleri için yazılı bir runbook tutun |
> Kritik hatırlatma: Hiç test edilmemiş bir yedekleme, yedekleme değildir — bu bir varsayımdır. Düzenli geri yükleme tatbikatları planlayın ve sonuçları belgeleyin.
Sonuç: PostgreSQL Verilerinizi AlexHost ile Güvenle Koruyun
PostgreSQL, açık kaynaklı veritabanı sistemleri arasında en kapsamlı yedekleme ve kurtarma araç setlerinden birini sunar. Hızlı SQL anlık görüntüleri için pg_dump basitliğinden, granüler zaman içinde nokta kurtarması için PITR’nin cerrahi hassasiyetine kadar, mermi geçirmez bir veri koruma stratejisi oluşturmak için ihtiyacınız olan her şeye sahipsiniz.
Anahtar, uygulamadır: yedeklemelerinizi otomatikleştirin, düzenli olarak doğrulayın, aktarımdan önce şifreleyin ve site dışında saklayın. AlexHost Dedicated Servers‘ın performansı ve güvenilirliği ile birleştirildiğinde — NVMe depolama, tam root erişimi ve kurumsal düzeyde DDoS koruması özellikli — PostgreSQL veritabanlarınız hem hızlı hem de dayanıklı olacaktır.
Çıplak metal yönetiminin yükü olmadan ölçeklenebilir altyapıya ihtiyaç duyan takımlar için, AlexHost VPS Hosting performans ve çalışma süresi konusunda aynı taahhüt ile esnek, uygun maliyetli bir alternatif sunar. Ve veritabanı destekli web uygulamalarınızı uçtan uca güvence altına almak gerekiyorsa, barındırmanızı AlexHost SSL Certificates ile eşleştirmek, uygulama katmanınız ile kullanıcılarınız arasında şifreli iletişim sağlar.
Bu yedekleme stratejilerini bugün uygulamaya başlayın. Gelecekte — saat 3’te üretim veritabanı bozulması ile karşı karşıya kalan — kendiniz buna teşekkür edeceksiniz.
tasarruf edin