İçeriğe geç
Muhammet Şafak
en
Soran: Yusuf Cevaplandı:

WAL arşivleme ve PITR ile felaketten saniyeler öncesine nasıl dönerim?


Soru

Bir siber saldırı veya hatalı kod (örn. `WHERE` koşulu unutulmuş bir `DELETE`) sonucu üretim DB'miz tahrif oldu. Gece alınan SQL backup'ına dönersek 18 saatlik veri kaybımız olur. DB mimarisinde WAL loglarının sürekli S3'e arşivlenmesi ve PITR altyapısı, felaket anından 3 saniye öncesine dönmemizi tam olarak nasıl sağlar? Süreci mimari olarak açıkla.

Cevap

Kısa cevap: Gecelik dump’lar 18 saatlik bir RPO (kabul edilebilir veri kaybı penceresi) demek — üretimde bu kabul edilemez. PITR (Point-in-Time Recovery) bu boşluğu kapatır ve seni hatalı ifadenin saniyeler öncesine geri götürür.

Mantık şu: bir base backup + o andan itibaren her değişikliğin sıralı kaydı (WAL) varsa, istediğin tam ana kadar “ileri sararak” geçmişi yeniden inşa edebilirsin.

  1. Periyodik base backup al. Düzenli aralıklarla tutarlı bir tam yedek (base backup) al. Bu, kurtarmanın başlangıç noktasıdır; WAL replay’i bu temelin üstüne uygulanır.
  2. WAL’ı sürekli S3’e arşivle. Write-Ahead Log, DB’deki her değişikliği sırayla yazar. archive_command (ya da pgBackRest/WAL-G) ile bu WAL segmentlerini üretildikçe S3’e at. Böylece base backup ile şu an arasındaki her işlemin kaydı dışarıda, güvende durur.
  3. recovery_target_time ile tam ana kadar replay et. Kurtarırken base backup’ı geri yükle, sonra WAL’ı belirlediğin hedefe kadar oynat: recovery_target_time = '...hatalı DELETE'den 3 saniye öncesi'. Postgres tam o noktada durur — yıkıcı ifadenin hemen öncesinde. “Felaketten bir an önce”ye böyle inersin, dün geceye değil.
  4. Restore’u mutlaka prova et. WAL arşivleme açık ve test edilmiş olmalı, base backup’lar bir takvime bağlı olmalı. En kritiği: kurtarmayı periyodik prova et. Doğrulanmamış bir yedek, Schrödinger’in yedeğidir — açana kadar çalışıp çalışmadığını bilmezsin. Bunu elle yazma; pgBackRest ya da WAL-G kullan.

Sonuç: Base backup + sürekli WAL arşivleme (S3’e) + test edilmiş PITR — 18 saatlik kaybı saniyelere indirir. Üretim DB’sinde sadece gecelik dump’a güvenmek, bir gün gelecek hatalı bir DELETE’te seni saatlerce veri kaybıyla baş başa bırakır; PITR’ı bugünden kur ve restore’u prova et.

İlgili Yazılar

Etiketler: #veritabanı#postgresql#dayanıklılık
Paylaş:

Yorumlar

Yorum yapmak için GitHub hesabınızla giriş yapmanız yeterli. Yorumlar GitHub Discussions üzerinde saklanır.

Diğer Sorular

Tüm sorular

Sitede Ara

Yazı, proje ve sayfalarda arama yapmak için yazmaya başlayın.

Esc ile kapat Pagefind ile güçlendirildi