PostgreSQL Yedekleme ve Kurtarma Çözümleri: Stratejiler ve Araçlar
- 18 Ağu
- 6 dakikada okunur
Güncelleme tarihi: 20 Ağu

PostgreSQL veritabanlarının güvenliği, kuruluşların operasyonel sürekliliğine doğrudan etki eden kritik bir faktördür. Veri kaybı riskleri, donanım arızalarından insan hatalarına kadar geniş bir yelpazede yer alır. Etkili yedekleme ve kurtarma çözümleri, bu riskler karşısında güçlü bir savunma mekanizması oluşturur. PostgreSQL ortamında farklı yedekleme yöntemleri, her biri farklı gereksinimleri karşılayacak şekilde tasarlanmıştır.
Geri yükleme stratejileri ise veri bütünlüğünü koruyarak işletim sürekliliğini sağlar. Ancak bu süreçler sırasında ortaya çıkan teknik sorunlar, yetersiz planlama veya otomasyon eksikliği nedeniyle kritik ölçüde karmaşıklaşabilir. Kurumsal düzeyde veri korumasını başarıyla sağlamak, yalnızca teorik bilginin değil, uygulamalı rehberler ve profesyonel çözümlere dayalı pratik bilginin gerekliliğini ortaya koymaktadır.
PostgreSQL Yedekleme Stratejinizi Seçerken Hangi Faktörler Belirleyici Olur?
Doğru yedekleme planını belirlemek için önce operasyonel gereksinimlerin eksiksiz analiz edilmesi gerekir. Bu analizde aşağıdaki faktörler belirleyici rol oynar:
Kurtarma Süresi Hedefi (RTO): Sistemin ne kadar sürede ayağa kaldırılması gerektiğini tanımlar.
Kurtarma Noktası Hedefi (RPO): Kabul edilebilir maksimum veri kaybı süresini belirler.
Veri hacmi ve büyüme hızı: Depolama kapasitesi planlamasını doğrudan etkiler.
Ağ bant genişliği: Uzak yedekleme lokasyonlarına aktarım süresini kısıtlar.
Yukarıdaki faktörler, hangi yedekleme yönteminin seçileceğini somut biçimde yönlendirir. Farklı senaryolarda tercih edilen yöntemler aşağıdaki tabloda karşılaştırmalı olarak sunulmuştur.
Kriter | Tam Yedekleme | Artımlı Yedekleme | Sürekli Arşivleme (WAL) |
RTO | Düşük | Orta | Yüksek |
RPO | Yüksek | Orta | Dakika altı |
Depolama Maliyeti | Yüksek | Düşük | Orta |
Geri Yükleme Karmaşıklığı | Düşük | Orta | Yüksek |
Uygun Senaryo | Küçük veritabanları | Orta ölçekli sistemler | Kritik üretim ortamları |
Tablodaki veriler, yedekleme kararlarının yalnızca teknik değil, aynı zamanda iş sürekliliği gereksinimleriyle de şekillendiğini ortaya koyar. Özellikle yüksek işlem hacmine sahip OLTP sistemlerinde WAL arşivleme, nokta bazlı kurtarma (PITR) imkânı sunarak veri koruma düzeyini önemli ölçüde artırır.
pg_dump ve pg_basebackup ile PostgreSQL Yedekleme Nasıl Yapılır?
PostgreSQL veritabanı yedekleme işlemleri için pg_dump ve pg_basebackup araçları, farklı ihtiyaçlara yönelik temel çözümler sunar. Bu iki araç, mantıksal ve fiziksel yedekleme yöntemleriyle veri güvenliğinin temelini oluşturur.
pg_dump ile Mantıksal Yedekleme Adımları
pg_dump aracı, bir veritabanının yapısını ve verilerini SQL komutları olarak dışa aktararak mantıksal PostgreSQL veri yedekleme işlemi gerçekleştirir. Bu yöntem, veritabanı objelerini taşınabilir bir formatta saklar.
Temel Yedekleme: Belirli bir veritabanını SQL formatında yedeklemek için pg_dump -U [kullanıcı_adı] -d [veritabanı_adı] > [yedek_dosyası].sql komutu kullanılır.
Özel Format (Sıkıştırılmış) Yedekleme: Daha esnek geri yükleme ve sıkıştırma avantajı sunan pg_dump -Fc komutu, büyük veritabanları için tercih edilir.
Seçici Yedekleme: Yalnızca veritabanı şemasını (--schema-only) veya sadece verileri (--data-only) yedeklemek mümkündür.
pg_basebackup ile Fiziksel Yedekleme Süreci
pg_basebackup ise tüm PostgreSQL veri kümesinin dosya sistemi düzeyinde tam bir kopyasını oluşturur. Bu yöntem, genellikle büyük veritabanlarının hızlı kurtarılması ve replikasyon senaryoları için kullanılır.
Ön Koşullar: Yedekleme yapacak kullanıcının REPLICATION iznine sahip olması ve wal_level ayarının en az replica olarak yapılandırılması gerekir.
Yedekleme Komutu: pg_basebackup -D /yedek/dizini -Ft -z -Xs -P komutuyla, işlem günlükleri (WAL) dahil edilerek sıkıştırılmış bir fiziksel pg_basebackup ile yedekleme gerçekleştirilir.
Bu iki temel araç, farklı senaryolara göre üstünlükler sunar. Birçok ekip, felaket kurtarma ve geliştirme ortamları için her iki yaklaşımı bir arada kullanarak kapsamlı PostgreSQL yedekleme ve kurtarma çözümleri oluşturur.
Hangi Senaryoda Hangi Araç Tercih Edilmeli?
pg_dump: Tek bir veritabanını yedeklemek, farklı PostgreSQL sürümleri arasında geçiş yapmak veya belirli tabloları geri yüklemek gerektiğinde idealdir.
pg_basebackup: Tüm veri kümesinin hızlı bir yedeğini almak, Point-in-Time Recovery (PITR) altyapısı kurmak veya replikasyon için bir temel oluşturmak amacıyla kullanılır.
PostgreSQL Yedekleme Araçlarını Karşılaştırırsak: pgBackRest, Barman ve Diğerleri
PostgreSQL veritabanları için geliştirilen yedekleme çözümleri, veri sürekliliği ve felaket kurtarma süreçlerinin temelini oluşturur. pgBackRest, Barman ve WAL-G gibi popüler araçlar, sundukları teknik özellikler ve mimari yaklaşımlar açısından farklılaşır. Bu araçların karşılaştırmalı analizi, kurumsal ihtiyaçlara en uygun çözümün belirlenmesine yardımcı olur.
Aşağıdaki tablo, üç temel aracın teknik özelliklerini ve temel farklılıklarını özetlemektedir.
Özellik | pgBackRest | Barman | WAL-G |
Yedekleme Türü | Fiziksel (blok düzeyinde artımlı) | Fiziksel (dosya düzeyinde rsync tabanlı) | Fiziksel (delta yedeklemeler) |
Performans | Yüksek hızlı paralel yedekleme/geri yükleme | Orta ölçekli dağıtımlar için güvenilir | Bulut ortamları için optimize edilmiş akış |
Kurulum Gereksinimi | Her düğümde yapılandırma, isteğe bağlı depo sunucusu | Özel bir yedekleme sunucusu gerektirir | Yedekleme sunucusu gerektirmez |
Paralel Yedekleme | Tam paralel destek | Yerel paralel geri yükleme desteği yok | Yapılandırılabilir eşzamanlılıkla akış |
Bulut Entegrasyonu | S3, GCS, Azure Blob Storage | S3 ve S3 uyumlu nesne depolama | S3, GCS, Azure Blob Storage, Swift |
Tabloda özetlenen teknik özellikler, her bir aracın belirli kullanım senaryolarında neden daha avantajlı olduğunu göstermektedir. Bu senaryolar, genellikle veritabanı boyutu, altyapı türü ve yönetimsel beklentilerle şekillenir.
pgBackRest: Genellikle 500 GB'tan büyük, yalnızca PostgreSQL kullanılan ve sıkı RPO/RTO hedefleri olan ortamlar için en uygun seçenektir.
Barman: Özellikle çok sayıda veritabanını merkezi bir sunucudan yönetme ihtiyacı olan ve sıfır veri kaybı (RPO) hedefleyen kurumlar için idealdir.
WAL-G: Altyapısı tamamen bulut tabanlı olan ve PostgreSQL dışında birden fazla veritabanı motoru kullanan ekipler için en basit ve esnek çözümdür.
PostgreSQL'de Otomatik Yedekleme Nasıl Kurulur?
PostgreSQL veritabanlarında otomatik yedekleme kurmak, veri bütünlüğünü ve iş sürekliliğini temin etmek adına kritik bir adımdır. Bu süreç, zamanlanmış görevler ve bu amaca yönelik geliştirilmiş özel yedekleme araçları kullanılarak verimli bir şekilde otomatize edilebilir.
Cron Job ile Yedekleme Otomasyonu
Unix benzeri sistemlerde PostgreSQL yedekleme süreçlerini otomatikleştirmek için yaygın olarak cron işleri kullanılır. Bir cron görevi, belirlenen komut veya betiğin belirli zaman aralıklarında otomatik olarak çalışmasını sağlar.
Standart bir cron işi tanımlamak için crontab dosyasına 15 01 * pgbackrest --type=full --stanza=mx backup gibi bir komut eklenir. Bu örnek, her gece 01:15'te tam yedekleme başlatır.
PostgreSQL için geliştirilen pg_cron uzantısı ise doğrudan veritabanı içinden SQL komutlarını zamanlama olanağı tanır. İşler cron.job tablosunda saklanır.
Windows ortamlarında ise bu otomasyon ihtiyacı için Görev Zamanlayıcı (Task Scheduler) aracı kullanılmaktadır.
Yedekleme otomasyonu için geliştirilmiş pgBackRest ve Barman gibi güçlü araçlar, süreci daha yönetilebilir hale getiren gelişmiş özellikler sunar. Bu araçlar, cron gibi temel zamanlayıcıların ötesinde, yedekleme yaşam döngüsünü yönetmek için kendi otomasyon yeteneklerine sahiptir.
pgBackRest ve Barman Otomasyon Özellikleri
pgBackRest: Tam, diferansiyel ve artımlı yedeklemeyi destekler. Yedekleme rotasyonu ve arşiv saklama süresi dolan dosyaların otomatik silinmesi gibi işlevler sunar.
Barman: Dosya tabanlı ve blok tabanlı artımlı yedeklemeler sunar. I/O bant genişliği kullanımını sınırlama ve PostgreSQL 15 ve üzeri için eş zamanlı yedeklemeleri destekleme gibi özelliklere sahiptir.
Bulut Tabanlı Yedeklemelerde Zamanlama Ayarları
Bulut ortamlarında zamanlama, sağlayıcının kendi araçları veya pg_cron gibi veritabanı içi zamanlayıcılar ile yapılır.
pg_cron, AWS RDS ve Google Cloud SQL gibi yönetilen veritabanı hizmetlerinde de kullanılabilir.
Bildirim ve Loglama Yöntemleri
Bildirim Mekanizmaları: Yedekleme betikleri, işlem tamamlandığında e-posta gibi kanallar aracılığıyla durum bildirimi gönderecek şekilde yapılandırılabilir.
Loglama Yöntemleri: cron işlerinin çıktıları bir log dosyasına yönlendirilebilir. pg_cron ise çalıştırma detaylarını cron.job_run_details tablosunda saklar.
PostgreSQL Yedeklerinde Veri Bütünlüğü Nasıl Test Edilir?
Yedek alma işlemi tek başına veri güvenliğini garanti etmez; alınan yedeğin tutarlı ve kullanılabilir olduğu doğrulanmalıdır. Veri bütünlüğü testleri, felaket anında kurtarma sürecinin başarıyla tamamlanmasını sağlar.
Yedek Doğrulama Adımları
Yedek dosyasının boyutunu ve oluşturulma zamanını kayıt altına alın.
pg_restore --list komutuyla yedeğin içeriğini listeleyin.
Yedek dosyasının bozulmadığını doğrulamak için MD5 veya SHA-256 hash değerini hesaplayın.
Doğrulama adımları tamamlandıktan sonra veri tutarlılığını katman katman kontrol etmek gerekir.
Checksum Doğrulama ve Veri Tutarlılığı Kontrolü
PostgreSQL'in yerleşik data checksum özelliğiyle blok düzeyinde bütünlük denetimi gerçekleştirilir.
pg_dump çıktısı üzerinde pg_restore ile sözdizimi doğrulaması yapılır.
SELECT count(*) sorguları kritik tablolardaki kayıt sayısını referans değerlerle karşılaştırır.
Bu kontroller veri uyumluluğunu doğrular; ardından gerçek ortamı taklit eden bir test sistemine geçiş yapılır.
Test Ortamına Geri Yükleme
İzole bir test sunucusu veya container ortamı hazırlayın.
Yedeği pg_restore -d testdb backup.dump komutuyla bu ortama yükleyin.
Tablo sayısı, indeksler ve kısıtlamalar referans şemayla karşılaştırılarak doğrulanır.
PostgreSQL Geri Yükleme: Enterprise Ortamlarda Veri Kurtarma Stratejileri
PostgreSQL veritabanlarında veri kaybı yaşandığında, enterprise düzeyde veri kurtarma stratejileri iş sürekliliğini sağlamak için kritik öneme sahiptir. Bu stratejiler, çeşitli PostgreSQL geri yükleme yöntemlerini, gelişmiş kurtarma tekniklerini ve teknik sorunlara karşı pratik çözüm yollarını kapsamaktadır.
PostgreSQL Veritabanı Geri Yükleme İşlemleri
Kurumsal bir ortamda geri yükleme sürecinin temelini oluşturan üç ana yaklaşım bulunmaktadır:
SQL Dump (Mantıksal Yedekleme): pg_dump ve pg_dumpall gibi araçlarla oluşturulan mantıksal yedekler, SQL komutları içeren dosyalar olarak kaydedilir. Bu yöntem, farklı PostgreSQL sürümleri veya mimariler arasında esneklik sunmasıyla öne çıkar.
Dosya Sistemi Seviyesi Yedekleme (Fiziksel Yedekleme): PostgreSQL veri dizininin doğrudan kopyalanması ve gerektiğinde geri yüklenmesi prensibine dayanır. Bu yaklaşım genellikle belirli bir sunucu sürümüne ve mimariye bağlıdır.
Sürekli Arşivleme (WAL Tabanlı Yedeklemeler): Bir temel yedekleme (base backup) ve Write-Ahead Log (WAL) dosyalarının arşivlenmesini birleştirir. Özellikle büyük veritabanları için tercih edilen bir yöntemdir.
Point-in-Time Recovery (PITR) gibi Kurumsal Kurtarma Yöntemleri
Point-in-Time Recovery (PITR), enterprise düzeyde PostgreSQL yedekleme altyapısının sağladığı en güçlü felaket kurtarma özelliklerinden biridir. Bu yöntem, veritabanını geçmişteki belirli bir zamana döndürme esnekliği sunarak veri kaybını minimize eder.
Veri Bütünlüğünü Koruma: Uygulama hataları veya donanım arızaları gibi durumlarda veritabanını hasar görmemiş bir anlık görüntüye geri yükler.
Hızlı Felaket Kurtarma: Siber saldırılar gibi ciddi olaylar sonrası sistemi son tutarlı durumuna hızla döndürerek iş sürekliliğini güvence altına alır.
İnsan Hatalarını Geri Alma: Yanlışlıkla çalıştırılan DELETE veya DROP gibi komutların etkilerini ortadan kaldırmak için işlemin yapıldığı andan öncesine dönülmesini sağlar.
PostgreSQL Kurtarma Sürecinde Sık Yapılan Hatalar ve Çözüm Yolları
PostgreSQL veri kurtarma süreci, çeşitli teknik problemler nedeniyle kesintiye uğrayabilir. Bu hataların anlaşılması ve doğru şekilde giderilmesi, veri kaybını önlemek ve sistemin hızlı bir şekilde normale dönmesini sağlamak için kritik öneme sahiptir.
Yanlış Kurtarma Ayarları
Yanlış yapılandırılmış kurtarma ayarları, kurtarma işleminin başlamasını engelleyebilir. Bu alanda gözlemlenen yaygın hatalar ve çözüm önerileri şunlardır:
PostgreSQL 12 ve üzeri sürümlerde recovery.conf yerine postgresql.conf dosyası kullanılmalıdır.
WAL dosyalarını arşivden çekmek için kullanılan restore_command parametresinin doğru yapılandırıldığından emin olunmalıdır.
Kurtarma modunu başlatan recovery.signal veya standby.signal gibi tetikleyici dosyaların doğru kullanılması gereklidir.
WAL Dosyası Eksiklikleri
Write-Ahead Log (WAL) dosyaları, veri tutarlılığı için hayati rol oynar. Bu dosyalardaki eksiklikler kurtarma işlemini doğrudan başarısız kılar.
archive_command kullanılarak WAL arşivleme mekanizmasının etkinleştirilmesi, dosya kayıplarını önler.
pg_wal dizinindeki disk alanının dolmasını önlemek için sistemin düzenli izlenmesi ve alan artırımı gerekir.
WAL dosyaları manuel olarak silinmemelidir; bunun yerine pg_archivecleanup aracı kullanılmalıdır.
Veri kaybı riski taşıyan pg_resetwal -f komutu, yalnızca son çare olarak ve dikkatle uygulanmalıdır.
Sürüm Uyumsuzlukları ve İzin Sorunları
Kurtarma sürecinde, yedek ile hedef PostgreSQL sürümü arasındaki uyumsuzluklar veya dosya sistemi izinlerindeki hatalar sıklıkla sorun yaratır:
Yedek alınan sürüm ile kurtarma yapılan sürüm uyumlu olmalıdır; büyük sürüm geçişleri için pg_upgrade aracı kullanılmalıdır.
Veri dizini ($PGDATA) ve dosyalarının sahipliği, postgres kullanıcısına ait olmalıdır.
chown -R postgres:postgres /var/lib/pgsql/data komutuyla dosya sahipliği ve izinleri düzeltilebilir.


