# Veritabanı Yedekleme Sistemi - Kullanım Kılavuzu

## 🎯 Özellikler

### 1. 🔄 Yeni Yedek Al
Admin panel listesinde üstte bulunan **"Yeni Yedek Al"** butonuna tıklayarak anında yeni bir veritabanı yedeği oluşturabilirsiniz.

**Konum:** `/admin/backup/databasebackup/`

**Özellikler:**
- Tek tıkla yedek oluşturma
- Otomatik dosya adlandırma (ör: `backup_server_dj_20251224_152152.sql`)
- Gerçek zamanlı durum güncellemesi
- Başarı/hata mesajları

### 2. 📤 Yedek Yükle (YENİ!)
Elinizdeki SQL yedek dosyasını sisteme yükleyebilirsiniz.

**Konum:** `/admin/backup/databasebackup/` - Mavi "Yedek Yükle" butonu

**Özellikler:**
- Bilgisayarınızdan SQL dosyası yükleme
- Maksimum 500MB dosya boyutu
- Otomatik dosya validasyonu (.sql kontrolü)
- Timestamp ile dosya adlandırma
- Yüklenen dosyalar hemen kullanılabilir (geri yükleme, indirme)

**Kullanım:**
1. "Yedek Yükle" butonuna tıklayın
2. Yedek adı girin (opsiyonel)
3. SQL dosyasını seçin
4. "Yükle" butonuna tıklayın

### 3. 📥 Yedek İndirme

#### Yöntem 1: İndir Butonu (Önerilen)
Liste görünümünde her yedeğin yanında yeşil **"İndir"** butonu vardır.
- Sadece tamamlanmış yedekler için görünür
- Tek tıkla indirme

#### Yöntem 2: Admin Action
1. Listeden bir yedek seçin (checkbox)
2. Üstteki "Actions" dropdown menüsünden **"Seçili Yedeği İndir"** seçin
3. "Go" butonuna tıklayın

#### Yöntem 3: Direkt URL
```
/admin/backup/databasebackup/{backup_id}/download/
```

### 3. 🔄 Yedek Geri Yükleme

1. Listeden geri yüklenecek yedeği seçin
2. "Actions" dropdown → **"Seçili Yedeği Geri Yükle"**
3. "Go" butonuna tıklayın

**⚠️ Uyarı:** Geri yükleme işlemi mevcut veritabanını değiştirecektir. Dikkatli olun!

### 4. 🗑️ Yedek Silme

#### Dosyaları Silme (Kayıtları Koruma)
1. Silinecek yedekleri seçin
2. "Actions" dropdown → **"Yedek Dosyalarını Sil"**
3. Veritabanı kaydı kalır ama fiziksel dosya silinir

#### Tamamen Silme (Kayıt + Dosya)
1. Silinecek yedekleri seçin
2. "Actions" dropdown → **"Seçili veritabanı yedekleri siliniyor"** (varsayılan delete)
3. Hem kayıt hem fiziksel dosya silinir (post_delete signal sayesinde)

## 📊 Yedek Durumları

| Durum | Renk | Açıklama |
|-------|------|----------|
| 🟠 Bekliyor | Turuncu | Yedek oluşturulmayı bekliyor |
| 🔵 İşleniyor | Mavi | Yedek şu an oluşturuluyor |
| 🟢 Tamamlandı | Yeşil | Yedek başarıyla oluşturuldu |
| 🔴 Başarısız | Kırmızı | Yedek oluşturulurken hata oluştu |

## 🔧 Teknik Detaylar

### Yedek Dosyaları
- **Konum:** `/backups/` klasörü
- **Format:** SQL dump dosyası
- **Adlandırma:** `backup_server_dj_YYYYMMDD_HHMMSS.sql`

### Otomatik Temizleme
Django'nun `post_delete` sinyali kullanılarak, veritabanı kaydı silindiğinde ilgili SQL dosyası da otomatik olarak silinir.

### Güvenlik
- Sadece staff/admin kullanıcıları erişebilir
- Her yedek, oluşturan kullanıcı bilgisi ile birlikte kaydedilir
- Dosya boyutları otomatik hesaplanır

## 🚀 Kullanım Senaryoları

### Senaryo 1: Rutin Yedek Alma
1. Admin panele giriş yap
2. "Yeni Yedek Al" butonuna tıkla
3. Yedeğin tamamlanmasını bekle (sayfa otomatik yenilenir)
4. Gerekirse yedeği indir

### Senaryo 2: Harici Yedek Yükleme (YENİ!)
1. "Yedek Yükle" butonuna tıkla
2. Bilgisayarından veya başka sunucudan aldığın SQL dosyasını seç
3. Yedek adı ver (opsiyonel)
4. Yükle
5. Yüklenen yedek artık sistemde kullanılabilir

### Senaryo 3: Veri Geri Yükleme
1. Geri yüklenecek yedeği bul
2. Önce o yedeği indir (güvenlik için)
3. "Seçili Yedeği Geri Yükle" action'ını kullan
4. Onay mesajını bekle

### Senaryo 4: Eski Yedekleri Temizleme
1. Silinecek yedekleri seç (çoklu seçim mümkün)
2. İki seçenek:
   - Sadece dosyaları sil (kayıt kalsın) → "Yedek Dosyalarını Sil"
   - Her şeyi sil → Varsayılan delete action

## 📝 Notlar

- Yedekler PostgreSQL için optimize edilmiştir
- Büyük veritabanları için yedekleme işlemi zaman alabilir
- Yedek dosyaları düzenli olarak kontrol edilmelidir
- Production ortamında yedekleri farklı bir sunucuya da kopyalamanız önerilir

## 🆘 Sorun Giderme

### Yedek Oluşturulamıyor
- PostgreSQL bağlantı ayarlarını kontrol edin
- `backups/` klasörünün yazma izinlerini kontrol edin
- Error mesajına bakın (Yedek detayında gösterilir)

### İndirme Çalışmıyor
- Dosyanın hala diskte olduğundan emin olun
- Yedeğin durumunun "Tamamlandı" olduğunu kontrol edin
- Tarayıcı konsol hatalarına bakın

### Geri Yükleme Başarısız
- Yedek dosyasının bozuk olmadığından emin olun
- PostgreSQL kullanıcısının yeterli yetkileri olduğunu kontrol edin
- Veritabanı bağlantısının aktif olduğunu doğrulayın

