DBAtlas · Veritabanı operasyon atlası

pg_basebackup + WAL arşivi ile yedek ve PITR (pgBackRest olmadan)

PostgreSQLSeviye: OrtaSüre: 45–90 dk

Ek 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
Ortamına göre adım adım planı aç →