Mövzunu Açan
#1
pg_dump ile PostgreSQL yedekleme
Tarihe dair tek bir veriye ihtiyaç duyduğunuz an, yedeklerinizin güvenilir olması hayat kurtarıcıdır. PostgreSQL’in pg_dump aracı, belirli bir veritabanını veya tüm yapıyı export etmek için temel ama güçlü bir yöntem sunar. Bu yazıda, farklı senaryolar için hangi seçeneklerin işinize yarayacağını, komutların nasıl yapılandırılacağını ve geri yüklemenin temel mantığını adım adım ele alacağım.
İlk adım: hangi seviyede yedekleme yapacaksınız?
Kapsam ve performans için ipuçları
Geri yükleme tarafı: temel mantık
Güvenlik ve sürüm uyumu
Özet ve kurulum adımları
1) Basit bir yedek için: pg_dump -Fc -f /path/backup.dump -d kaynak_db
2) Tüm veritabanı için: pg_dumpall -U postgres > /path/all_databases.sql
3) Geri yükleme için: pg_restore -d hedef_db /path/backup.dump
4) Test: staging ortamında restore işlemini çalıştırıp veri bütünlüğünü kontrol edin.
Bu konudaki deneyimleriniz ve karşılaştığınız tipik senaryolar nelerdir? Özellikle büyük veritabanlarında hangi stratejiyle yedekleme ve geri yükleme yapıyorsunuz, karşılaştığınız performans sorunlarını nasıl aşarsınız?
Tarihe dair tek bir veriye ihtiyaç duyduğunuz an, yedeklerinizin güvenilir olması hayat kurtarıcıdır. PostgreSQL’in pg_dump aracı, belirli bir veritabanını veya tüm yapıyı export etmek için temel ama güçlü bir yöntem sunar. Bu yazıda, farklı senaryolar için hangi seçeneklerin işinize yarayacağını, komutların nasıl yapılandırılacağını ve geri yüklemenin temel mantığını adım adım ele alacağım.
İlk adım: hangi seviyede yedekleme yapacaksınız?
- Basit tek veritabanı için pg_dump: Veriyi SQL komutları olarak veya özel formatta (custom, tar, directory) dışa aktarır. Örneğin, SQL formatı insan tarafından okunabilir, fakat büyük veritabanlarında geri yükleme daha yavaş olabilir.
- Tüm veritabanı için pg_dumpall: Sunucudaki tüm veritabanlarını dışa aktarır; yapı, kullanıcılar ve tablolar gibi nesnelere dair kapsamlı bir görünüm elde etmek için kullanışlıdır. Ancak büyük ortamlarda tek tek veritabanı yedeklemek daha yönetilebilir olabilir.
Kapsam ve performans için ipuçları
- Veritabanı düzeyinde yedekleme: pg_dump -Fc -f backup.dump -d hedef_veritabani ile özel format seçildiğinde geri yükleme esnekliği artar. Büyük tabloları paralel olarak işlemek için -j (paralel iş parçacığı) desteği vardır; amaca uygun şekilde donanımı kullanmak hızlı bir geri yükleme sağlar.
- İçerik filtreleme: -t tablo_adı veya -n şema.adı ile yalnızca gerekli kısımları dışa aktarın. Bu, geliştirme ve test ortamları için zaman kazandırır.
- Veritabanı kullanıcıları: -x veya --no-blobs gibi bayraklar, verinin kayıt mekanizmasını ve ikincil verileri nasıl ele alacağını belirler. Büyük veri setlerinde blob’ların etkisi önemlidir.
- Transaction ve tutarlılık: pg_dump genellikle veritabanı tutarlılığını sağlamak için bir anlık görüntü (consistent snapshot) üretir. Özellikle değişim yoğun olan ortamlarda, yedeklemeyi araçla yürütürken maintenance penceresi ve kilit etkileri dikkate alınır.
Geri yükleme tarafı: temel mantık
- SQL formatında yedekten geri yükleme: psql -d hedef_veritabani -f backup.sql
- Özel formatında geri yükleme: pg_restore -d hedef_veritabani backup.dump; -j ile paralel geri yükleme kullanımı performansı artırabilir.
- Tüm veritabanı veya şema odaklı geri yüklemede, kullanıcı oluşturma, yetkilendirme ve veri uyumsuzluklarını dikkatle ele almak gerekir.
Güvenlik ve sürüm uyumu
- Yedeklerin güvenli saklanması için dosya sisteminde yetkileri doğru ayarlayın ve ağ üzerinde aktarımda TLS/SSH kullanın.
- pg_dump ile sunucunun sürümü ile geri yüklemenin hedef sürümü arasında uyumsuzluklar olabilir. En güvenli yaklaşım, geri yüklemenin hedef PostgreSQL sürümüyle test edildiği bir staging ortamında doğrulamaktır.
Özet ve kurulum adımları
1) Basit bir yedek için: pg_dump -Fc -f /path/backup.dump -d kaynak_db
2) Tüm veritabanı için: pg_dumpall -U postgres > /path/all_databases.sql
3) Geri yükleme için: pg_restore -d hedef_db /path/backup.dump
4) Test: staging ortamında restore işlemini çalıştırıp veri bütünlüğünü kontrol edin.
Bu konudaki deneyimleriniz ve karşılaştığınız tipik senaryolar nelerdir? Özellikle büyük veritabanlarında hangi stratejiyle yedekleme ve geri yükleme yapıyorsunuz, karşılaştığınız performans sorunlarını nasıl aşarsınız?
