EMZETT.
Giriş yap

Point-in-time recovery: veri tabanını bir ana geri almak

Kısaca: Point-in-time recovery (PITR), bir temel yedeğin üzerine işlem günlüğünü o ana kadar yeniden oynatarak veri tabanını geçmişteki herhangi bir ana geri yükler.

Biraz daha ayrıntılı: 14:03’te yanlışlıkla bir tablo silinirse gecelik bir yedek pek işe yaramaz: yarım gün eksiktir. PITR, yedeğe ek olarak her tek değişikliği tutarak bu boşluğu kapatır.

Ayrıntılı

İlke

Veri tabanları her değişikliği önce bir write-ahead log’a (WAL) yazar. PITR ile bir temel yedek (verilerin tam kopyası) ve sürekli arşivlenen WAL bulunur. Geri yüklemek için temel yedeği yerine koyar ve WAL’ın hatadan hemen öncesine kadar çalışmasına izin verirsin (recovery_target_time). Sonuç: dün geceki yerine 14:02:59 durumu.

Uygulama (PostgreSQL)

  • archive_mode = on ve archive_command biten WAL segmentlerini güvenli bir yere kopyalar.
  • pg_basebackup (veya pgBackRest, Barman, WAL-G gibi araçlar) ile temel yedek.
  • Geri yükleme: yedeği yerine koy, recovery.signal oluştur, hedef zamanı ayarla, sunucuyu başlat.
  • Yönetilen hizmetler (örneğin Neon, Supabase, RDS) PITR’yi bir özellik olarak sunar, çoğu zaman sınırlı bir pencereyle (plana bağlı olarak saatler ile günler).

Önemli notlar

  • PITR, operatör hatalarına ve hatalı güncellemelere karşı korur; WAL arşivi aynı yerde duruyorsa depolama arızasına karşı korumaz: site dışında sakla.
  • Geri yüklemeyi test et; test edilmemiş bir yedek yalnızca umuttur.
  • Genellikle yeni bir örneğe geri yüklenir ve yalnızca ihtiyacın olan veriler devralınır.
  • Saklama yükümlülüklerine ve gizliliğe uyması için saklama süresi (silinen kişisel veriler yedeklerden ancak sürenin sonunda kaybolur).
  • Temel göstergeler: RPO (ne kadar veri kaybı kabul edilebilir) ve RTO (geri yüklemenin ne kadar sürebileceği).

Ayrıca bak: pg_dump ve psql, İşlemler ve ACID, Neon