\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/DatabaseBackupMasterv5/ |
|
B-Con CMD Config cPanel C-Rdp D-Log Info Jump Mass Ransom Symlink vHost Zone-H |
| Current File : /var/www/html/yedekledb24/DatabaseBackupMasterv5/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()