Bir PostgreSQL veritabanını geçirmek nadiren sadece veriyi taşımaktan ibarettir; süreklilik, bütünlük ve performans sağlamaktan geçer. İster yerel sunucudan AWS RDS veya Azure Database for PostgreSQL gibi bulut tabanlı bir hizmete geçiyor olun, ister sadece 12'den 15'e yükseltme yapıyor olun, riskler yüksektir. Kesinti süresi para kaybına neden olur ve veri bozulması güveni zedeler. Bu rehberde, PostgreSQL geçişi için iki temel metodolojiyi: mantıksal ve fiziksel yaklaşımları keşfedecek ve spesifik mimari ihtiyaçlarınız için doğru aracı seçmenize yardımcı olacağız.
Doğru Geçiş Stratejisini Seçmek
Herhangi bir komutu çalıştırmadan önce, mantıksal veya fiziksel bir geçiş arasında karar vermelisiniz. Mantıksal geçiş, veri yapısını ve içeriğini SQL veya özel format dosyalarına dışa aktarmayı ve bunları hedefe yeniden içe aktarmayı içerir. Bu, çapraz sürüm yükseltmeleri, platform değişiklikleri veya ağ gecikmesinin yönetilebilir olduğu küçük-orta ölçekli veritabanları için idealdir. Burada birincil araçlar pg_dump ve pg_restore'tur.
Fiziksel geçiş ise ham veri dosyalarının doğrudan kopyalanmasını içerir. Bu, büyük veri setleri (terabaytlar) için önemli ölçüde daha hızlıdır ve dahili PostgreSQL yapılarını tam olarak korur. Ancak, sıkı sürüm uyumluluğu ve alttaki dosya sistemine erişim gerektirir. pg_basebackup veya üçüncü taraf replikasyon kurulumları burada yaygındır. Çoğu standart yönetimsel görev için mantıksal geçiş, esneklik ve kontrol dengesi açısından en iyi sonucu sunar.
Adım 1: Hazırlık ve Şema Analizi
Kör körüne geçiş yapmayın. Olası sorunlar için kaynak veritabanınızı analiz ederek başlayın. Büyük nesneler, belirli uzantı bağımlılıkları veya şişmiş tablolar darboğazlara neden olabilir. Parçalama stratejinizi belirleyecek olan en büyük tabloları tanımlamak için aşağıdaki sorguyu kullanın:
SELECT
nspname || '.' || relname AS "relation",
pg_size_pretty(pg_total_relation_size(C.oid)) AS "total_size"
FROM pg_class C
LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
WHERE nspname NOT IN ('pg_catalog', 'information_schema')
ORDER BY pg_total_relation_size(C.oid) DESC
LIMIT 10;
Ayrıca, herhangi bir veri geri yüklemesi denemeden önce hedef ortamda gerekli uzantıların (örneğin postgis, pgcrypto) yüklü olduğundan emin olun.
Adım 2: Mantıksal Dışa Aktarımın Gerçekleştirilmesi
PostgreSQL geçişinin temel taşı pg_dump'tur. Tam bir mantıksal yedekleme için, özel formatlı bir arşiv oluşturmak üzere -Fc bayrağını kullanın. Bu format sıkıştırılmıştır ve daha sonra ince ayarlı geri yükleme seçeneklerine olanak tanır. Çok büyük bir veritabanıyla uğraşıyorsanız, birden fazla CPU çekirdeğini kullanmak için -j bayrağını ayarlayarak paralel dışa aktarımı düşünün.
# Özel formatla tam mantıksal yedekleme
pg_dump -U myuser -h localhost -Fc -f mydb_backup.dump my_database
# Daha hızlı performans için paralel dışa aktarım (4+ çekirdek gerektirir)
pg_dump -U myuser -h localhost -Fc -j 4 -f mydb_backup.dump my_database
Adım 3: Hedef Ortama Geri Yükleme
Dışa aktarma dosyası hedef sunucunuza (scp veya bulut depolama kullanarak) aktarıldığında, pg_restore kullanarak geri yükleyebilirsiniz. Bu araç çok yönlüdür ve hem özel hem de düz SQL dosyalarını işleyebilir.
# Yeni bir veritabanına geri yükleme
createdb -U myuser -h target_host new_database
pg_restore -U myuser -h target_host -d new_database mydb_backup.dump
PostgreSQL'in daha yeni bir ana sürümüne geçiş yapıyorsanız uyumluluk uyarıları karşılaşabilirsiniz. Geçiş sırasında sürüme özgü hataları izole etmek için, yerinde yükseltmek yerine eski sürümden dışa aktarmak ve yeni sürüme geri yüklemek genellikle daha güvenlidir.
Sıfır Kesinti Süresi İçin En İyi Uygulamalar
Üretim ortamlarında, büyük veri setlerini aktarma süresi nedeniyle tek bir dışa aktarma/geri yükleme döngüsü genellikle yetersiz kalır. Neredeyse sıfır kesinti süresi elde etmek için mantıksal replikasyon kullanmayı düşünün. Hedef ortamınızda bir abone düğümü kurun, verileri kademeli olarak replike edin ve ardından nihai senkronizasyon geçişini gerçekleştirin. Bu, uygulama bağlantı dizenizi değiştirdiğiniz tam ana kadar hedef veritabanının kaynakla senkronize kalmasını sağlar.
Sonuç
PostgreSQL veritabanlarını geçirmek dikkatli planlama gerektirir, ancak PostgreSQL ekosisteminin sağladığı güçlü araçlardan yararlanarak riski en aza indirebilirsiniz. Mantıksal dışa aktarımların esnekliğini veya fiziksel yedeklerin hızını seçin; her durumda geçiş sürecinizi önce bir önizleme (staging) ortamında test edin. Sorunsuz bir geçişi sağlamak için veri bütünlüğünü doğrulayın, uygulama bağlantısını kontrol edin ve geçiş sonrası performans metriklerini izleyin.