first commit
This commit is contained in:
166
RESTORE_COZUM.md
Normal file
166
RESTORE_COZUM.md
Normal file
@@ -0,0 +1,166 @@
|
||||
# 🔄 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!
|
||||
|
||||
Reference in New Issue
Block a user