pg_basebackup + WAL arşivi ile yedek ve PITR (pgBackRest olmadan)
PostgreSQLSeviye: OrtaSüre: 45–90 dkEk araç kurmadan, PostgreSQL'in kendi araçlarıyla fiziksel yedek: archive_command ile sürekli WAL arşivi, pg_basebackup ile gecelik base backup, pg_archivecleanup ile saklama. Belirli bir zamana / transaction'a / restore point'e dönüş (recovery.signal, restore_command, recovery_target_*), timeline ve düzenli restore tatbikatı; sonunda arşivlenen WAL, gecelik yedek ve denenmiş bir geri dönüş yolu elde edilir. Ek araçsız alternatif: artımlı/paralel/şifreli yedek, S3 ve hazır saklama yönetimi gerekiyorsa pgBackRest rehberi; tablo/veritabanı taşımak ya da tek tablo geri getirmek için mantıksal yedek (pg_dump, PITR yapmaz).
Yapı: 1 sunucu; streaming ya da Patroni'de arşiv dizini tüm node'larda ortak (NFS)
Senaryolar
- WAL arşivini ve gecelik base backup'ı kur — İlk kurulum: archive_command ile sürekli WAL arşivi, pg_basebackup betiği, /etc/cron.d zamanlaması, saklama ve WAL temizliği. archive_mode için bir kez kısa yeniden başlatma gerekir.
- Belirli bir ana geri dön (PITR: zaman, xid, LSN, restore point) — Veri yanlışlıkla silindi/değişti (DROP, DELETE, TRUNCATE) ya da sunucu/disk kayboldu: base backup açılır, arşivdeki WAL hedefe kadar uygulanır. Tüm cluster kapanır ve hedefe döner; hedeften sonrası kaybolur.
- Restore tatbikatı (ayrı dizinde, canlıya dokunmadan) — Yedeğin gerçekten açıldığını kanıtlamak için (ayda bir önerilir): son base backup doğrulanır (pg_verifybackup), ayrı dizine açılıp arşivle ayrı portta başlatılır; süre (RTO) ölçülür. Canlıya dokunulmaz.
- Eski base backup'ları ve WAL arşivini temizle — Arşiv ya da yedek diski doluyor veya saklama değişti: eski base backup'lar silinir, pg_archivecleanup ile en eski yedekten önceki WAL kaldırılır (önce dry-run). Veritabanı açık kalır.
Başlamadan önce
- PostgreSQL … kurulu ve çalışıyor (pg-install); veri dizini ….
- … ve … veri diskinden ayrı bir diskte/NFS paylaşımında, kalıcı bağlı (fstab)… ve tüm PostgreSQL sunucularında aynı yolda (failover sonrası yeni primary aynı arşive yazmalı)…. Yer: (saklanan yedek sayısı + 1) × sıkıştırılmış veri boyutu + günlük WAL hacmi × saklama günü.
- Başka bir arşiv/yedek aracı (pgBackRest, Barman, WAL-G) tanımlı değil; iki araç aynı WAL'ı farklı yerlere taşırsa ikisi de eksik kalır.
- Saat NTP ile eşit (PITR hedef zamanı sunucu saatine göre yorumlanır).
- archive_mode değişikliği için kısa bir yeniden başlatma penceresi var.
- Uygulamalar durduruldu; hedeften sonraki tüm değişikliklerin kaybolacağı onaylandı.… Standby/replica'lar restore sonrası yeniden kurulacak.…
Rehberin aşamaları
- WAL arşivi ve base backup kurulumu — Arşiv ve yedek dizinlerini hazırla · WAL arşiv betiğini yaz · Betiği çalıştırılabilir yap ve dene · PostgreSQL arşiv ayarlarını yaz · PostgreSQL'i yeniden başlat · Arşiv ayarlarını Patroni'ye yaz (edit-config) …
- Restore tatbikatı — Tatbikat dizinini hazırla ve son yedeği seç · Yedeği aç ve doğrula (pg_verifybackup) · Tatbikat instance'ını arşivle başlat · Veriyi doğrula · Tatbikat instance'ını kapat ve temizle
- Saklama ve WAL temizliği — Yedekler, arşiv boyutu ve en eski gereken WAL · Saklama dışındaki base backup'ları sil · WAL temizliğini önce dry-run ile göster · WAL arşivini temizle · Arşivin hâlâ çalıştığını doğrula