PostgreSQL’de veritabanı yedeği nasıl alınır
PostgreSQL’de veritabanı yedeği nasıl alınır İçindekilerPostgreSQL'de veritabanı yedeği nedir, nelere dikkat edilirPostgreSQL yedek alma türleri ve temel farklarıMantıksal yedekleme nedir?Fiziksel yedekleme nedir?Mantıksal yedek alma yöntemleri ve komutlarıTek veritabanı için pg_dump kullanımıTüm veritabanları için pg_dumpall kullanımıMantıksal yedek…

PostgreSQL’de veritabanı yedeği nasıl alınır
PostgreSQL'de veritabanı yedeği nedir, nelere dikkat edilir
PostgreSQL'de veritabanı yedeği ile ilgili temel noktaları aşağıda adım adım özetliyoruz.
Veritabanı yönetiminde veri kaybını önlemek için yedek almak hayati bir adımdır. PostgreSQL kullanan herkes, önemli verilerini güvence altına almak için düzenli ve doğru yedekleme yöntemlerini bilmelidir. Bu yazıda, PostgreSQL yedek alma sürecini en basit ve etkili şekilde nasıl yapacağınızı öğreneceksiniz. Hem küçük projeler hem de kurumsal düzeyde veritabanları için uygulanabilir yöntemler adım adım açıklanacaktır.
PostgreSQL yedek alma türleri ve temel farkları
PostgreSQL’de yedek alma işlemi iki ana kategoriye ayrılır: mantıksal ve fiziksel yedekleme. Bu iki yöntem, kullanım amaçları, avantajları ve uygulanış biçimleriyle birbirinden ayrılır.
- Mantıksal yedekleme, veritabanının içeriğini SQL komutları veya özel formatlarda dışa aktarır.
- Fiziksel yedekleme ise veritabanı dosyalarının birebir kopyalanmasıdır.
Bu iki yöntem arasındaki temel farkları bilmek, ihtiyaçlarınıza en uygun yedekleme stratejisini belirlemenize yardımcı olur.
Mantıksal yedekleme nedir?
Mantıksal yedekleme, veritabanının tablolar, veriler, fonksiyonlar ve diğer nesnelerin SQL komutlarıyla dışa aktarılmasıdır. Bu sayede yedek dosyası platform bağımsızdır ve kolayca başka bir PostgreSQL sunucusuna aktarılabilir.
- Kullanılan araçlar: `pg_dump` ve `pg_dumpall`
- Avantajları:
- Veritabanı çalışmaya devam ederken yedek alınabilir.
- Yedek dosyası okunabilir ve gerektiğinde düzenlenebilir.
- Küçük ve orta boy veritabanlarında hızlıdır.
- Dezavantajları:
- Büyük veritabanlarında yedekleme ve geri yükleme süresi uzun olabilir.
Fiziksel yedekleme nedir?
Fiziksel yedekleme, veritabanı dosyalarının ve günlüklerinin doğrudan kopyalanmasıdır. Çoğunlukla büyük ve aktif veritabanları için tercih edilir.
- Kullanılan araçlar: `pg_basebackup` ve WAL (Write Ahead Log) arşivleme
- Avantajları:
- Hızlı geri yükleme sağlar.
- Veritabanı dosyalarının tam kopyası alınır, tutarlılık garantilenir.
- Büyük veritabanlarında daha uygundur.
- Dezavantajları:
- Yedekleme sırasında sunucu yapılandırması ve disk alanı yönetimi önemlidir.
- WAL dosyalarının düzgün yönetilmesi gerekir.

Mantıksal yedek alma yöntemleri ve komutları
Tek veritabanı için pg_dump kullanımı
En çok tercih edilen yöntem `pg_dump` aracıdır. Bu araçla belirli bir veritabanının yedeği alınabilir. Örnek temel komut:
pg_dump -U postgres -h localhost -F c -b -v -f /yedekler/veritabani.backup veritabani_adi
Açıklamalar:
- `-U postgres`: Bağlanılacak kullanıcı (genelde `postgres` kullanılır)
- `-h localhost`: Sunucu adresi
- `-F c`: Özel (compressed) format
- `-b`: Büyük nesneleri (large objects) dahil et
- `-v`: Ayrıntılı çıktı (verbose)
- `-f`: Yedek dosyasının yolu ve adı
- `veritabani_adi`: Yedeklenecek veritabanı ismi
Bu komut, veritabanının tamamını sıkıştırılmış formatta yedekler. Geri dönük uyumluluk için bu format tercih edilir.
Tüm veritabanları için pg_dumpall kullanımı
Sunucu üzerindeki tüm veritabanlarını, kullanıcıları ve izinleri yedeklemek için `pg_dumpall` kullanılır. Örnek komut:
pg_dumpall -U postgres -h localhost > /yedekler/tum_veritabani.sql
Bu komut, tüm veritabanlarını ve rol bilgilerini tek bir SQL dosyasında dışa aktarır. Geri yükleme işlemi için bu dosya `psql` ile çalıştırılır.
Mantıksal yedek geri yükleme örneği
Özel formatta alınan yedeği geri yüklemek için `pg_restore` kullanılır:
pg_restore -U postgres -h localhost -d hedef_veritabani -v /yedekler/veritabani.backup
Burada `-d` hedef veritabanı ismini belirtir. Eğer hedef veritabanı yoksa önce oluşturulmalıdır.
Fiziksel yedek alma ve geri yükleme
pg_basebackup ile tam yedek alma
Fiziksel yedekleme için `pg_basebackup` komutu kullanılır. Örnek:
pg_basebackup -U repl_kullanici -h localhost -D /yedekler/pg_basebackup -Fp -Xs -P -v
Parametreler:
- `-D`: Yedek dosyalarının kaydedileceği dizin
- `-Fp`: Dosya formatında yedekleme (raw dosya kopyası)
- `-Xs`: WAL dosyalarını da dahil et
- `-P`: İlerleme gösterimi
- `-v`: Ayrıntılı çıktı
Bu yöntemle alınan yedek, veritabanı dosyalarının tam kopyasıdır ve hızlı geri yükleme sağlar.
WAL arşivleme ile tam tutarlılık sağlama
WAL (Write Ahead Log) dosyaları, veritabanında gerçekleşen tüm değişiklik kayıtlarını tutar. WAL dosyalarını arşivleyerek, fiziksel yedeklemenin ardından yapılan tüm değişiklikler de korunur. Bu sayede veritabanı herhangi bir noktaya geri döndürülebilir.
- WAL arşivleme için `postgresql.conf` dosyasında `archive_mode` ve `archive_command` ayarları yapılmalıdır.
- Örnek:
archive_mode = on
archive_command = 'cp %p /yedekler/wal_archive/%f'
WAL dosyalarının düzenli arşivlenmesi, kurtarma senaryolarında kritik önem taşır.
Yedek alma işlemi sırasında dikkat edilmesi gerekenler
- Yedekleme için kullanılan kullanıcı, gerekli yetkilere sahip olmalıdır. Genellikle `postgres` kullanıcısı yetkilidir.
- Yedek dosyalarının bulunduğu dizin yeterli alan ve uygun erişim izinlerine sahip olmalıdır.
- Yedekleme işlemi sunucu performansını etkileyebilir; yoğun olmayan saatlerde yapılması önerilir.
- Yedek dosyalarının güvenliği için erişim kısıtlamaları ve tercihen şifreleme uygulanmalıdır.
- Düzenli aralıklarla yedeklerin geri yüklenebilirliği test edilmelidir.
- Büyük veritabanlarında yedekleme ve geri yükleme süreleri planlanmalıdır.
Otomatik yedekleme ve pratik çözümler
Cron ile düzenli yedek alma
Linux sunucularda otomatik yedekleme için `cron` kullanılır. Örnek günlük pg_dump cron görevi:
0 2 * * * pg_dump -U postgres -F c -b -v -f /yedekler/veritabani_$(date +%Y%m%d).backup veritabani_adi
Bu komut her gün saat 02:00’de yedek alır. Dosya adı tarih içerir, böylece geçmiş yedekler saklanabilir.
Yedek dosyalarını sıkıştırmak
`pg_dump` özel formatta zaten sıkıştırma sağlar, ancak SQL formatında yedek alınıyorsa gzip ile sıkıştırmak yer kaplamayı azaltır:
pg_dump -U postgres veritabani_adi | gzip > /yedekler/veritabani.sql.gz
Bulut depolama ile yedek koruma
Yedekler, fiziksel sunucular dışında AWS S3, Google Cloud Storage gibi bulut depolama alanlarına da gönderilebilir. Bu yöntem felaket durumlarında veri kaybını önler.
Örnek AWS CLI ile yedek yükleme:
aws s3 cp /yedekler/veritabani.backup s3://yedek-bucket/
Yedekleme hataları ve çözüm önerileri
- Yetki hataları: Yedek alma sırasında “permission denied” hatası alınırsa, kullanılan kullanıcı yetkileri kontrol edilmeli. `postgres` kullanıcısı veya gerekli rol atanmalı.
- Disk alanı sorunları: Yedekleme sırasında disk dolu hatası alınabilir. Yedekleme dizini yeterli boş alana sahip olmalı.
- Bağlantı sorunları: Sunucu adresi ve port doğrulanmalı, firewall ayarları kontrol edilmeli.
- Yedek dosyası bozulması: Yedek dosyaları düzenli test edilmeli, dosya bütünlüğü sağlanmalı.
- Performans etkisi: Yoğun iş saatlerinde yedekleme yapılmamalı, gerekiyorsa düşük öncelikli işlem olarak ayarlanmalı.
İyi bir PostgreSQL yedekleme stratejisi nasıl olur?
- Yedekleme sıklığı veritabanının önemine göre belirlenir. Kritik sistemlerde günlük veya saatlik yedekleme önerilir.
- Mantıksal yedekleme ile düzenli yedeğiniz olsun, ancak büyük veritabanları için fiziksel yedekleme ve WAL arşivleme de kullanın.
- Yedeklerinizi en az iki farklı ortamda saklayın (yerel ve bulut).
- Yedekleme otomasyonunu kurarak insan hatalarını azaltın.
- Yedekleri geri yükleyerek doğrulama yapın.
- Yedekleme ve geri yükleme prosedürlerini dokümante edin.
Sık sorulan sorular
- Veritabanı çalışırken yedek alınabilir mi?
Evet, mantıksal yedekleme araçları veritabanı çalışırken yedek alabilir. Fiziksel yedekleme bazen sunucu yapılandırmasına bağlıdır.
- Yedek dosyasından veritabanı nasıl geri yüklenir?
Mantıksal yedeklerde `pg_restore` veya `psql` komutları, fiziksel yedeklerde dosya kopyalama ve WAL kullanımı ile yapılır.
- Yedek dosyası çok büyük, ne yapmalıyım?
Sıkıştırma kullanmak, sadece gerekli tabloları yedeklemek veya fiziksel yedekleme tercih etmek çözüm olabilir.
- Yedekleme başarısız olursa?
Hata mesajlarını inceleyip yetki, alan veya bağlantı sorunlarını giderin. Log dosyalarını kontrol edin.
- Yedekleme sıklığını nasıl belirlemeli?
Veritabanının güncelleme sıklığı ve veri kritikliği temel alınmalıdır.
İlgili yazılar
Editörün Notu
PostgreSQL’de düzenli ve doğru yedekleme, veri kaybı riskini ciddi şekilde azaltır. Özellikle pg_dump ve pg_basebackup gibi araçları kullanarak yedekleme stratejinizi oluşturmanız verilerinizin her zaman erişilebilir kalmasını sağlar.
Ek okuma / Kaynak: PostgreSQL Resmi Belgeleri – Backup and Restore
İlgili yazılar:
