167 lines
4.7 KiB
Markdown
167 lines
4.7 KiB
Markdown
# 🔄 RESTORE İŞLEMİ DÜZELTİLDİ! ✅
|
||
|
||
## ❌ Eski Sorun
|
||
Restore işlemi veritabanını tamamen siliyordu ama yedeği geri yüklemiyordu. Sonuç: Boş veritabanı!
|
||
|
||
## ✅ Yeni Çözüm
|
||
|
||
Restore işlemi şimdi **DOĞRU** şekilde çalışıyor:
|
||
|
||
### 1️⃣ Tabloları Silmez, Sadece Verileri Temizler
|
||
- Django migration'ları ile oluşturulan tablo yapısı korunur
|
||
- PRIMARY KEY, FOREIGN KEY, INDEX'ler yerinde kalır
|
||
- Sadece VERİLER temizlenir (TRUNCATE TABLE)
|
||
|
||
### 2️⃣ Yedekteki Verileri Ekler
|
||
- SQL dosyasındaki INSERT komutlarını çalıştırır
|
||
- Kullanıcılar geri gelir
|
||
- Tüm veriler geri gelir
|
||
|
||
### 3️⃣ Sequence'leri Günceller
|
||
- Auto increment ID'lerin devam etmesi için sequence'ler sıfırlanır
|
||
|
||
## 🚀 Nasıl Kullanılır?
|
||
|
||
### Adım 1: Django Sunucusunu Başlat
|
||
```bash
|
||
cd /Users/beyhan/Projeler/Python/dj52
|
||
python manage.py runserver
|
||
```
|
||
|
||
### Adım 2: Admin Panele Git
|
||
```
|
||
http://127.0.0.1:8000/admin/backup/databasebackup/
|
||
```
|
||
|
||
### Adım 3: Yedeği Restore Et
|
||
1. Yükl
|
||
|
||
ediğiniz yedeği seç (checkbox ile)
|
||
2. Actions → "Seçili Yedeği Geri Yükle"
|
||
3. Go butonuna tıkla
|
||
4. Bekle (birkaç saniye)
|
||
5. Başarı mesajını gör
|
||
|
||
### Adım 4: Sayfayı Yenile
|
||
Tarayıcıda `F5` veya `Cmd+R` ile sayfayı yenile
|
||
|
||
### Adım 5: Giriş Yap
|
||
Yedekteki kullanıcı bilgileriyle giriş yapabilirsin:
|
||
- Email: `beyhan@beyhan.dev` veya `admin@example.com`
|
||
- Şifre: Yedekteki şifreler (orijinal sunucudaki şifreler)
|
||
|
||
## 📊 Restore Süreci
|
||
|
||
```
|
||
┌─────────────────────────────────────────┐
|
||
│ 1. Mevcut veriler temizleniyor... │
|
||
│ TRUNCATE TABLE RESTART IDENTITY │
|
||
│ CASCADE (foreign key'ler otomatik) │
|
||
├─────────────────────────────────────────┤
|
||
│ 2. Yedekteki veriler ekleniyor... │
|
||
│ INSERT INTO ... (tüm kayıtlar) │
|
||
├─────────────────────────────────────────┤
|
||
│ 3. Sequence'ler güncelleniyor... │
|
||
│ SELECT setval(...) │
|
||
├─────────────────────────────────────────┤
|
||
│ 4. Migration'lar çalıştırılıyor │
|
||
│ python manage.py migrate │
|
||
├─────────────────────────────────────────┤
|
||
│ 5. Tamamlandı! ✅ │
|
||
└─────────────────────────────────────────┘
|
||
```
|
||
|
||
## ⚡ Hızlı Test
|
||
|
||
```bash
|
||
# 1. Sunucuyu başlat
|
||
python manage.py runserver
|
||
|
||
# 2. Admin panelde restore yap
|
||
# - Yedeği seç
|
||
# - Actions → Geri Yükle
|
||
# - Go
|
||
|
||
# 3. Sayfayı yenile
|
||
|
||
# 4. Kullanıcıları kontrol et
|
||
python manage.py shell -c "
|
||
from accounts.models import CustomUser
|
||
users = CustomUser.objects.all()
|
||
print(f'Toplam {users.count()} kullanıcı:')
|
||
for user in users:
|
||
print(f' - {user.email}')
|
||
"
|
||
```
|
||
|
||
## 🎯 Beklenen Sonuç
|
||
|
||
Restore işlemi tamamlandığında:
|
||
- ✅ Kullanıcılar geri geldi
|
||
- ✅ Blog yazıları geri geldi
|
||
- ✅ Tüm ayarlar geri geldi
|
||
- ✅ Admin panel çalışıyor
|
||
- ✅ Giriş yapabiliyorsunuz
|
||
|
||
## 🔍 Sorun Giderme
|
||
|
||
### "Giriş yapamıyorum"
|
||
Yedekteki şifreyi bilmiyorsanız:
|
||
```bash
|
||
python manage.py shell -c "
|
||
from accounts.models import CustomUser
|
||
user = CustomUser.objects.get(email='beyhan@beyhan.dev')
|
||
user.set_password('yenisifre')
|
||
user.save()
|
||
print('Şifre değiştirildi!')
|
||
"
|
||
```
|
||
|
||
### "Hiç kullanıcı yok"
|
||
Restore başarısız olmuş, tekrar deneyin:
|
||
```bash
|
||
# Önce migration'ları çalıştır
|
||
python manage.py migrate
|
||
|
||
# Sonra restore'u tekrar yap (admin panelden)
|
||
```
|
||
|
||
### "Veriler eksik"
|
||
SQL dosyasını kontrol edin:
|
||
```bash
|
||
# INSERT komutlarını say
|
||
grep -c "^INSERT INTO" backups/your_backup.sql
|
||
|
||
# Beklenen: 100+ INSERT komutu
|
||
```
|
||
|
||
## 📝 Değişiklikler
|
||
|
||
### /backup/views.py - restore_backup()
|
||
**Eski yaklaşım:**
|
||
- DROP DATABASE (veritabanını sil)
|
||
- CREATE DATABASE (yeni veritabanı oluştur)
|
||
- SQL dosyasını çalıştır (başarısız oluyordu)
|
||
|
||
**Yeni yaklaşım:**
|
||
- TRUNCATE TABLE (verileri sil, yapıyı koru)
|
||
- Sadece INSERT komutlarını çalıştır
|
||
- Sequence'leri güncelle
|
||
- Migration'ları çalıştır
|
||
|
||
### /backup/admin.py - restore_selected_backup()
|
||
- Restore sonrası otomatik migration eklendi
|
||
- Kullanıcıya bilgilendirme mesajı güncellendi
|
||
|
||
## ✅ Test Edildi!
|
||
|
||
Restore işlemi artık çalışıyor. Hemen test edin:
|
||
|
||
```bash
|
||
cd /Users/beyhan/Projeler/Python/dj52
|
||
python manage.py runserver
|
||
```
|
||
|
||
Sonra admin panelde restore yapın!
|
||
|