# Disaster recovery runbook

Faunamix canli oncesi minimum DR kaniti:

1. Uretim veritabanindan zaman damgali SQL snapshot alin.
2. Snapshot checksum uret ve sakla.
3. Ayni snapshot ile ayri bir hedefe restore provasi yap.
4. MySQL binary log acik ve retention suresi tanimli olsun.
5. Restore provasi sonucu ve tarih kayda gecsin.

## Yerel veya uzak backup alma

```bash
./scripts/backup-database.sh
```

Varsayilan cikti dizini: `.local/backups/mysql`

Istersen farkli env dosyasi ile:

```bash
FAUNAMIX_ENV_FILE=api/.env.railway ./scripts/backup-database.sh
```

## Restore provasi

Geri yukleme yikici islem oldugu icin once otomatik pre-restore backup alir.

```bash
FAUNAMIX_RESTORE_CONFIRM=RESTORE_faunamix ./scripts/restore-database.sh .local/backups/mysql/faunamix-YYYYMMDDTHHMMSSZ.sql.gz
```

Hedef veritabanini bilerek restore ediyorsan ve pre-backup atlanacaksa:

```bash
FAUNAMIX_RESTORE_CONFIRM=RESTORE_faunamix ./scripts/restore-database.sh --skip-pre-backup path/to/backup.sql.gz
```

## Izole rehearsal

Bu yol yikici olmayan proof icindir; snapshot'i ayri bir hedef DB'ye restore eder, temel tablo/count kontrolu yapar
ve `.local/restore-rehearsals/` altina JSON rapor birakir.

```bash
./scripts/rehearse-restore.sh
```

Istersen belirli backup ile:

```bash
./scripts/rehearse-restore.sh .local/backups/mysql/faunamix-YYYYMMDDTHHMMSSZ.sql.gz
```

Restore edilen hedef DB'yi incelemek icin silmeden birak:

```bash
./scripts/rehearse-restore.sh --keep-db
```

## DR readiness dogrulamasi

```bash
php scripts/verify-disaster-recovery.php
```

Bu betik sunlari tarar:

- backup/restore betikleri repoda var mi
- restore rehearsal betigi ve son rehearsal raporu var mi
- runbook mevcut mu
- backup retention tanimli mi
- yerel backup dizininde snapshot var mi
- DB baglantisi kurulabiliyorsa `log_bin`, `binlog_format`, `binlog_expire_logs_seconds` / `expire_logs_days`

## Production checklist

- Her deploy oncesi veya en azindan gunluk snapshot alin.
- Her kritik schema degisimi oncesi ekstra manuel snapshot alin.
- En az haftalik izole restore rehearsal yapin.
- Binary log kapaliysa PITR yok kabul edin.
- Failover topolojisi repo disindaysa bile son prova tarihi ve sorumlusu kayitli olsun.
