L20 — Backup al, temiz bir ortama restore et, bütünlüğü kanıtla#
"Backup her gece alınıyor" bir güvence değildir. Güvence, o backup'ın temiz bir ortama gerçekten geri yüklenebildiğini görmektir. Burada seed'li bir Postgres'ten backup alır, onu boş ikinci bir Postgres'e restore eder, satır sayısıyla bütünlüğü kanıtlar; sonra restore süreni (RTO) ve veri kaybı pencereni (RPO) ölçer.
Gerekenler#
docker+docker compose(yerel; bulut gerekmez).
Görev#
- Yığını başlat.
db(kaynak, 1000 satır seed) +db_restore(boş hedef). - Kaynağı doğrula.
db'deorderstablosunda 1000 satır olduğunu gör: - Backup al (
db→ dosya).pg_dumpkullan, --schema-only DEĞİL (veri dahil): - Restore et (dosya →
db_restore, temiz ortam) ve süreyi ölç:timeçıktısındaki süre senin ölçülen RTO'ndur. - Bütünlüğü kanıtla.
db_restore'da da 1000 satır olmalı: - Raporla.
report.txt'e yaz: - restore sonrası satır sayısı (= 1000) ve kaynakla eşleştiği,
- RTO (ölçülen restore süresi) ve RPO (gecelik backup için ~24 saatlik pencere; niçin),
- erişim + at-rest şifreleme kontrolü: bu backup dosyasına kim erişebilir, şifreli mi, gerçek ortamda nerede saklanmalı.
Kabul kriterleri#
-
bash verify.shsıfır hatayla geçiyor. -
report.txtrestore sonrası satır sayısını (1000) ve kaynakla eşleştiğini içeriyor. -
report.txtölçülen RTO ve RPO'yu (pencere + niçin) içeriyor. -
report.txtbackup'ın erişim + at-rest şifreleme kontrolünü içeriyor.
İpucu (çözüm değil)#
- Restore "çalıştı" ama satır sayısı 0 ise backup'ını
--schema-onlyalmış olabilirsin — dump dosyasının içindeCOPY/INSERTveri satırları var mı bak. - RTO = geri gelme süresi (kesinti hedefi). RPO = kabul edilen veri kaybı penceresi. Gecelik tek backup → en kötü durumda ~24 saatlik veri kaybı riski.
- Backup, veritabanının tamamıdır; en az canlı DB kadar korunmalı — açık dosya/bucket tüm veriyi sızdırır.
Takılırsan solution/'a bak — ama önce kendin dene.