K08 — "Restore ettik ama veri yok" — çok-katmanlı restore arızası#
Modül:
E4· Tür: kırık lab · Süre: ~60–120 dk
Belirti#
Prod shop veritabanının orders tablosu boşaldı. Ekip "her gece backup alıyoruz" diyor; env/backups/ altında üç dosya var. Gece backup'ından restore ettin, komut hatasız döndü, uygulama açıldı — ama hiç sipariş yok:
# restore "başarılı" göründü, ama:
docker compose -f env/compose.yaml exec -T db_restore \
psql -U postgres -d shop -tAc "SELECT count(*) FROM orders;"
# 0
Kaynakta 1000 satır olması gerekiyordu. Elindeki backup'lardan veriyi temiz hedefe (db_restore) geri getir. README ne bozulduğunu söylemez — belirti bu kadar.
⚠️ Burada tek bir arıza yok. İlk denediğin backup seni yanıltabilir; üç dosyanın hepsi aynı derecede güvenilir değil. "Restore başarılı döndü" bir kanıt değildir.
Gerekenler#
docker+docker compose(yerel; bulut gerekmez).
Kur#
Bu; seed'li bir kaynak db (1000 satır) + boş bir db_restore hedefi ayağa kaldırır ve env/backups/ altına gerçek ekip gibi üç backup dosyası bırakır.
Görevin#
- Her backup'ı test et, körlemesine güvenme. Üç dosyanın hangisi gerçekten tam veriyi geri getiriyor? Her restore denemesini satır sayısıyla doğrula — çıkış kodu değil,
count(*). - Kök sebe(pler)i kanıtla. Boş gelen / hata veren / erişilemeyen backup'ların her biri niçin öyle? Tahmine değil, dosyanın içeriğine/izinlerine bak.
- Veriyi geri getir.
db_restore'daorders1000 satır olana kadar devam et. - Doğrula:
teshis.mdyaz: her backup dosyası için tek satır tanı (hangisi neden kötü), hangisini kullandın, ve restore'u niçin satır sayısıyla doğrulamak gerektiği.
Kurallar#
- Önce kendin dene.
hints/'i sırayla aç;solution.mden son. - Restore'un
exit 0dönmesi "veri geldi" demek değildir. Kabul kriterincount(*), çıkış kodu değil. - Backup, veritabanının tamamıdır: en zayıf erişim kontrollü kopya odur. Erişemediğin bir backup, incident anında yok hükmündedir.