Files
dj52/RESTORE_COZUM.md
Beyhan Oğur ec28a2024d first commit
2026-04-26 22:22:29 +03:00

167 lines
4.7 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🔄 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!