Bir veritabanı, çoğu işletmenin en değerli dijital varlığıdır. Müşteri kayıtları, siparişler, finansal hareketler, uygulama verileri… Hepsi PostgreSQL gibi bir veritabanında durur. Peki bu verilere bir gün bir şey olursa? Yanlışlıkla silinen bir tablo, bozulan bir disk ya da bir fidye yazılımı saldırısı, yıllarca biriktirdiğiniz veriyi saniyeler içinde yok edebilir.
İşte tam da bu yüzden düzenli ve doğru yapılandırılmış yedekleme, tartışılması gereken bir konu değil; olmazsa olmaz bir zorunluluktur. Üstelik KVKK kapsamında kişisel veri işleyen her kurum için yedekleme, aynı zamanda yasal bir sorumluluktur.
Bu rehberde PostgreSQL veritabanınızı baştan sona nasıl yedekleyeceğinizi adım adım, ekran görüntüleriyle anlatacağız. Komut satırından çekinmenize gerek yok — her komutu ne işe yaradığıyla birlikte açıklayacağız ve görsel arayüzle (pgAdmin) yedek alma yöntemini de göstereceğiz.
Yedeklemeye Başlamadan Önce: Bilmeniz Gereken 3 Temel Kavram
Yöntemlere geçmeden önce, doğru bir yedekleme stratejisini şekillendiren üç temel kavramı kısaca tanıyalım.
RPO ve RTO
RPO (Recovery Point Objective), kabul edilebilir maksimum veri kaybınızı tarif eder: “En fazla kaç saatlik veriyi kaybetmeyi göze alabilirim?” RTO (Recovery Time Objective) ise “Bir felaket anında sistemi ne kadar sürede ayağa kaldırmam gerekiyor?” sorusunun cevabıdır. Yedekleme sıklığınızı ve yönteminizi bu iki hedef belirler.
3-2-1 Kuralı
Sağlam bir yedekleme stratejisinin altın kuralı şudur: Verinizin 3 kopyası olsun, bunları 2 farklı ortamda saklayın ve en az 1 kopyayı tesis dışında (örneğin bulutta) tutun. Tek bir yedek, yedek sayılmaz.
Yedek test edilmeden yedek değildir
Hiç geri yüklenmemiş bir yedek, çalıştığından emin olamadığınız bir umuttan ibarettir. Bu yüzden bu rehberde geri yükleme (restore) adımlarını da göstereceğiz.
PostgreSQL’de Yedekleme: 3 Temel Yöntem
PostgreSQL’de veriyi yedeklemenin birbirinden farklı üç yaklaşımı vardır:
Mantıksal yedekleme (pg_dump / pg_dumpall): Veritabanını yeniden oluşturacak SQL komutlarına ya da özel bir arşiv dosyasına dönüştürür. En esnek ve en yaygın yöntemdir.
Fiziksel yedekleme (pg_basebackup): Veritabanı dosyalarının birebir kopyasını alır. Büyük veritabanlarında hızlıdır.
Sürekli arşivleme + PITR: WAL kayıtları sayesinde veritabanını geçmişteki herhangi bir ana geri döndürmenizi sağlar.
Çoğu kullanıcı için günlük hayatta en pratik ve yeterli yöntem mantıksal yedeklemedir. O yüzden işe oradan başlıyoruz.
Yöntem 1: pg_dump ile Mantıksal Yedekleme (En Yaygın Yöntem)
pg_dump, tek bir veritabanını dosyaya aktaran komut satırı aracıdır. PostgreSQL ile birlikte hazır gelir, ekstra kurulum gerektirmez.
Adım 1: PostgreSQL’e bağlanın ve sürümünüzü kontrol edin
Önce her şeyin yerli yerinde olduğundan emin olalım. Terminal (Linux) veya Komut İstemi (Windows) açıp şu komutla bağlantıyı ve sürümü kontrol edin:
psql -U postgres -c "SELECT version();"
PowerShell’de sürüm sorgusu ve dönen PostgreSQL 17.10 satırı
Adım 2: Tek bir veritabanını yedekleyin
En basit yedekleme komutu şudur. veritabani_adi yerine kendi veritabanınızın adını yazın:
Bu komut, veritabanınızı yedek.sql adında düz bir metin dosyasına aktarır. Dosyanın içinde, veritabanını sıfırdan yeniden oluşturacak tüm SQL komutları bulunur.
pg_dump komutunun çalışıp temiz şekilde tamamlanması
Adım 3: Oluşan yedek dosyasını kontrol edin
Komut çalıştıktan sonra yedek dosyanızın gerçekten oluştuğunu doğrulayın:
dir yedek.sql
Dosyanın boyutunun 0 olmadığından emin olun — bu, yedeğin içinde gerçekten veri olduğunu gösterir.
dir yedek.sql çıktısı — dosya boyutu (29321) görünür
Adım 4: Sıkıştırılmış “custom format” yedek alın (Önerilen)
Düz .sql dosyası okunabilir ama büyük veritabanlarında çok yer kaplar. Bunun yerine, sıkıştırılmış ve geri yüklerken daha esnek olan custom format kullanmanızı öneririz:
pg_dump -U postgres -d veritabani_adi -F c -f yedek.dump
Buradaki -F c ifadesi, çıktının özel (custom) sıkıştırılmış biçimde olmasını sağlar. Bu format, ileride tek tek tabloları geri yükleyebilmenize ve paralel geri yükleme yapabilmenize imkân tanır.
.sql (29321) ile .dump (6679) dosya boyutlarının karşılaştırması
Adım 5: Tüm veritabanlarını birden yedekleyin (pg_dumpall)
Sunucunuzda birden fazla veritabanı varsa ve hepsini (kullanıcılar, roller dahil) tek seferde yedeklemek istiyorsanız pg_dumpall kullanın:
pg_dumpall -U postgres -f tum_cluster.sql
Bu komut, sadece veritabanlarını değil; kullanıcıları, rolleri ve sunucu genelindeki tüm ayarları da yedekler.
pg_dumpall komutu ve oluşan tum_cluster.sql dosyası
Yöntem 2: pgAdmin ile Arayüzden Yedekleme
Komut satırıyla uğraşmak istemeyenler için PostgreSQL’in resmi yönetim aracı pgAdmin, birkaç tıklamayla yedek almanızı sağlar.
Adım 1: Veritabanına sağ tıklayın
pgAdmin’i açın, sol taraftaki ağaç yapısından yedeklemek istediğiniz veritabanına sağ tıklayın ve açılan menüden Backup… seçeneğini seçin.
pgAdmin’de veritabanına sağ tık, menüde Backup… vurgulu
Adım 2: Dosya adını ve formatı belirleyin
Açılan pencerede yedek dosyasının kaydedileceği konumu ve adını girin. Format olarak Custom seçmenizi öneririz — bu, komut satırındaki -F c seçeneğinin görsel karşılığıdır.
pgAdmin Backup penceresi — Filename dolu ve Format = Custom
Adım 3: Yedeklemeyi başlatın ve sonucu görün
Backup düğmesine tıkladığınızda işlem başlar. Sağ alt köşede işlemin başarıyla tamamlandığını gösteren bildirimi göreceksiniz.
pgAdmin Processes sekmesinde “Finished” durumu
Adım 4: pgAdmin ile geri yükleme
pgAdmin yalnızca yedek almakla kalmaz; aldığınız yedeği arayüzden geri yüklemenizi de sağlar. Geri yüklemek istediğiniz veritabanına sağ tıklayın ve Restore… seçeneğini seçin. Açılan pencerede Format olarak Custom or tar seçin ve Filename alanında daha önce aldığınız .dump dosyasını gösterin. Restore düğmesine tıkladığınızda işlem başlar; Processes sekmesinde tamamlandığını (Finished) görebilirsiniz.
pgAdmin Restore penceresi — Format “Custom or tar” ve Filename’de .dump dosyası seçili
Yöntem 3: pg_basebackup ile Fiziksel Yedekleme
Çok büyük veritabanlarında veya tüm sunucunun birebir kopyasına ihtiyaç duyduğunuz durumlarda pg_basebackup devreye girer. Bu araç, veritabanı dosyalarının fiziksel bir kopyasını alır.
pg_basebackup -U postgres -D C:\yedek\base -F t -z -P
Not:pg_basebackup her zaman tüm sunucuyu (cluster) yedekler; tek bir veritabanını seçerek yedekleyemezsiniz. Tek veritabanı için pg_dump daha uygundur.
Sürekli Arşivleme ve PITR: Zamanda Geriye Dönmek
İleri düzey senaryolarda, veritabanını geçmişteki herhangi bir ana (örneğin yanlışlıkla yapılan bir silme işleminden bir saniye öncesine) geri döndürmek isteyebilirsiniz. Buna PITR (Point-in-Time Recovery) denir.
PITR, fiziksel bir base backup ile birlikte sürekli biriken WAL (Write-Ahead Log) kayıtlarının arşivlenmesiyle çalışır. Kabaca postgresql.conf dosyasında WAL arşivlemeyi açar:
Bu yöntem, sıfır veri kaybı hedefleyen üretim ortamları için kritiktir. Kurulumu daha karmaşık olduğundan, küçük ve orta ölçekli ihtiyaçlar için önce pg_dump ile başlamanızı öneririz.
En Önemli Adım: Yedeği Geri Yükleme (Restore)
Bir yedeğin gerçekten işe yaradığını ancak geri yükleyince anlarsınız. İşte yedeklerinizi nasıl geri yükleyeceğiniz.
Custom format (.dump) yedeği geri yükleme
# Önce boş hedef veritabanını oluştur
psql -U postgres -c "CREATE DATABASE yeni_veritabani;"
pg_restore -U postgres -d yeni_veritabani yedek.dump
Düz SQL (.sql) yedeği geri yükleme
psql -U postgres -d yeni_veritabani -f yedek.sql
Geri yüklemeyi doğrulayın
Geri yükleme bittikten sonra, verinin gerçekten geldiğini bir sorguyla teyit edin:
psql -U postgres -d yeni_veritabani -c "SELECT count(*) FROM tablo_adi;"
Restore adımları ve count = 500 doğrulama çıktısı
Bu adımı düzenli olarak tekrarlamanızı şiddetle öneririz. Çalışmayan bir yedek, hiç yedek almamaktan farksızdır.
Yedeklemeyi Otomatikleştirin
Manuel yedek almak unutulmaya çok açıktır. En sağlıklısı, yedeklemeyi zamanlanmış bir göreve bağlamaktır.
Windows (Görev Zamanlayıcı): Önce C:\yedek\yedek-al.bat adında bir toplu iş (batch) dosyası oluşturun ve içine yedekleme komutunu yazın:
pg_dump -U postgres -d veritabani_adi -F c -f C:\yedek\gunluk.dump
Ardından bu dosyayı her gün saat 02:00’de çalışacak şekilde Görev Zamanlayıcı’ya kaydedin:
PostgreSQL’in kendi araçları çoğu ihtiyacı karşılar. Çok büyük ölçekli, çoklu sunucu içeren kurumsal ortamlarda ise paralel işleme, otomatik saklama politikaları ve bulut entegrasyonu sunan üçüncü taraf araçlar (örneğin Barman, WAL-G ve pgBackRest) tercih edilebilir.
Her durumda, doğru başlangıç noktası bir araç seçmek değil; RPO/RTO ve 3-2-1 kuralı üzerine kurulu sağlam bir stratejidir.
Doğru Yedekleme İçin En İyi Pratikler
Şifreleyin: Yedek dosyaları tüm veritabanınızı içerir. Özellikle bulutta saklarken mutlaka şifreleyin.
İzleyin: Bir yedek başarısız olduğunda sizi uyaracak bir izleme/bildirim kurun. Haftalarca fark edilmeyen başarısız bir yedek, en kötü senaryodur.
Tesis dışında saklayın: En az bir kopya, sunucunuzun bulunduğu yerden farklı bir konumda (bulut) olsun.
Düzenli test edin: Geri yükleme tatbikatını takviminize ekleyin.
3-2-1 kuralının “tesis dışı” kopyasını otomatik, şifreli ve KVKK uyumlu biçimde almak için PostgreSQL veritabanlarınızı Narbulut bulut yedekleme altyapısına taşıyabilirsiniz.