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

4.7 KiB
Raw Permalink Blame History

🔄 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

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

# 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:

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:

# Önce migration'ları çalıştır
python manage.py migrate

# Sonra restore'u tekrar yap (admin panelden)

"Veriler eksik"

SQL dosyasını kontrol edin:

# 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:

cd /Users/beyhan/Projeler/Python/dj52
python manage.py runserver

Sonra admin panelde restore yapın!