\x89PNG\r\n\x1a\n\x00\x00\x00\x0DIHDR\x00\x00\x00\x01\x00 \x00\x00\x01\x08\x06\x00\x00\x00\x1F\x15\xC4\x89\x00\x00\x00 \x0AIDATx\x9Ccb\x00\x00\x00\x06\x00\x03\x1A\x05\x9D\x00\x00 \x00\x00IEND\xAE\x42\x60\x82
| Path : /var/www/html/yedekledb24/DatabaseBackupMasterv7/ |
|
B-Con CMD Config cPanel C-Rdp D-Log Info Jump Mass Ransom Symlink vHost Zone-H |
| Current File : /var/www/html/yedekledb24/DatabaseBackupMasterv7/drop.py |
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
yedekleDB24 için veritabanındaki backup_log tablosundaki parent_backup_id
ve backup_method sütunlarını düzelten script.
"""
import os
import sys
import logging
import psycopg2
from psycopg2 import sql
from dotenv import load_dotenv
# Logging ayarları
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
def get_database_url():
"""Veritabanı URL'sini çevre değişkeninden alır."""
load_dotenv()
db_url = os.environ.get('DATABASE_URL')
if not db_url:
logger.error("DATABASE_URL çevre değişkeni bulunamadı.")
sys.exit(1)
return db_url
def fix_backup_log_columns():
"""backup_log tablosunu düzeltir - parent_backup_id ve parent_log_id uyumsuzluğunu çözer."""
db_url = get_database_url()
try:
# Veritabanı bağlantısını kur
conn = psycopg2.connect(db_url)
cursor = conn.cursor()
# backup_log tablosunda parent_log_id sütunu var mı kontrol et
cursor.execute("""
SELECT column_name
FROM information_schema.columns
WHERE table_name = 'backup_log' AND column_name = 'parent_log_id'
""")
has_parent_log_id = cursor.fetchone() is not None
# backup_log tablosunda parent_backup_id sütunu var mı kontrol et
cursor.execute("""
SELECT column_name
FROM information_schema.columns
WHERE table_name = 'backup_log' AND column_name = 'parent_backup_id'
""")
has_parent_backup_id = cursor.fetchone() is not None
# Her ikisi de var ise, parent_backup_id'deki değerleri parent_log_id'ye aktar ve parent_backup_id'yi sil
if has_parent_log_id and has_parent_backup_id:
logger.info("Her iki sütun da mevcut, parent_backup_id'deki değerleri parent_log_id'ye aktarıyorum...")
cursor.execute("""
UPDATE backup_log
SET parent_log_id = parent_backup_id
WHERE parent_log_id IS NULL AND parent_backup_id IS NOT NULL
""")
# parent_backup_id sütununu kaldır
logger.info("parent_backup_id sütununu kaldırıyorum...")
cursor.execute("""
ALTER TABLE backup_log
DROP COLUMN parent_backup_id
""")
logger.info("parent_backup_id sütunu kaldırıldı.")
# Sadece parent_backup_id var ise, parent_log_id olarak yeniden adlandır
elif has_parent_backup_id and not has_parent_log_id:
logger.info("parent_backup_id sütununu parent_log_id olarak yeniden adlandırıyorum...")
cursor.execute("""
ALTER TABLE backup_log
RENAME COLUMN parent_backup_id TO parent_log_id
""")
logger.info("Sütun adı değiştirildi.")
# Sadece parent_log_id var ise, sorun yok
elif has_parent_log_id and not has_parent_backup_id:
logger.info("parent_log_id sütunu zaten var, sorun yok.")
# İkisi de yoksa, parent_log_id sütununu oluştur
else:
logger.info("parent_log_id sütununu oluşturuyorum...")
cursor.execute("""
ALTER TABLE backup_log
ADD COLUMN parent_log_id INTEGER REFERENCES backup_log(id) ON DELETE SET NULL
""")
logger.info("parent_log_id sütunu oluşturuldu.")
# backup_method sütunu kontrolü
cursor.execute("""
SELECT column_name
FROM information_schema.columns
WHERE table_name = 'backup_log' AND column_name = 'backup_method'
""")
if cursor.fetchone() is None:
logger.info("backup_method sütunu ekleniyor...")
cursor.execute("""
ALTER TABLE backup_log
ADD COLUMN backup_method VARCHAR(16) DEFAULT 'full'
""")
logger.info("backup_method sütunu eklendi.")
else:
logger.info("backup_method sütunu zaten mevcut.")
# Değişiklikleri kaydet
conn.commit()
logger.info("Tüm sütunlar başarıyla güncellendi!")
except Exception as e:
logger.error(f"Veritabanı şeması güncellenirken hata oluştu: {str(e)}")
if 'conn' in locals() and conn:
conn.rollback()
return False
finally:
if 'cursor' in locals() and cursor:
cursor.close()
if 'conn' in locals() and conn:
conn.close()
return True
def check_models_py():
"""models.py dosyasındaki tanımlamaları kontrol et."""
try:
# Ana proje dizinine geçiş yapmak için
from pathlib import Path
project_dir = str(Path(__file__).parent.absolute())
sys.path.append(project_dir)
# models.py'yi içe aktar
import models
# BackupLog sınıfını kontrol et
if hasattr(models, 'BackupLog'):
backup_log_class = models.BackupLog
# Hangi sütun adını kullanıyor?
has_parent_backup_id = hasattr(backup_log_class, 'parent_backup_id')
has_parent_log_id = hasattr(backup_log_class, 'parent_log_id')
if has_parent_backup_id and not has_parent_log_id:
logger.warning("models.py dosyasında parent_backup_id kullanılmış, ancak veritabanında parent_log_id var.")
logger.warning("models.py dosyasını güncelleyin: parent_backup_id -> parent_log_id")
elif has_parent_log_id and not has_parent_backup_id:
logger.info("models.py dosyası doğru: parent_log_id kullanılıyor.")
elif has_parent_backup_id and has_parent_log_id:
logger.warning("models.py dosyasında hem parent_backup_id hem de parent_log_id tanımlanmış.")
logger.warning("Bir tanesi kaldırılmalı. parent_log_id kullanın.")
else:
logger.warning("models.py dosyasında parent_backup_id veya parent_log_id tanımlanmamış.")
else:
logger.warning("models.py dosyasında BackupLog sınıfı bulunamadı.")
except ImportError as e:
logger.error(f"models.py dosyası içe aktarılırken hata oluştu: {str(e)}")
except Exception as e:
logger.error(f"models.py dosyası kontrol edilirken hata oluştu: {str(e)}")
def main():
"""Ana fonksiyon"""
logger.info("Veritabanı sütunlarını düzeltme scripti başlatılıyor...")
# models.py'yi kontrol et
check_models_py()
# Sütunları düzelt
if fix_backup_log_columns():
logger.info("Veritabanı sütunları başarıyla düzeltildi.")
else:
logger.error("Veritabanı sütunları düzeltilemedi!")
sys.exit(1)
if __name__ == "__main__":
main()