İç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 sizi 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ğiniz tam ana kadar “ileri sararak” geçmişi yeniden inşa edebilirsiniz.

  1. Periyodik base backup alın. Düzenli aralıklarla tutarlı bir tam yedek (base backup) alın. Bu, kurtarmanın başlangıç noktasıdır; WAL replay’i bu temelin üstüne uygulanır.
  2. WAL’ı sürekli S3’e arşivleyin. 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ın. 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 edin. Kurtarırken base backup’ı geri yükleyin, sonra WAL’ı belirlediğiniz hedefe kadar oynatın: 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 inersiniz, dün geceye değil.
  4. Restore’u mutlaka prova edin. WAL arşivleme açık ve test edilmiş olmalı, base backup’lar bir takvime bağlı olmalı. En kritiği: kurtarmayı periyodik prova edin. Doğrulanmamış bir yedek, Schrödinger’in yedeğidir — açana kadar çalışıp çalışmadığını bilmezsiniz. Bunu elle yazmayın; pgBackRest ya da WAL-G kullanın.

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 sizi saatlerce veri kaybıyla baş başa bırakır; PITR’ı bugünden kurun ve restore’u prova edin.

İlgili Yazılar

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