\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/DatabaseBackupMaster/ |
|
B-Con CMD Config cPanel C-Rdp D-Log Info Jump Mass Ransom Symlink vHost Zone-H |
| Current File : /var/www/html/yedekledb24/DatabaseBackupMaster/add_compression_columns.py |
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
yedekleDB24 için veritabanı şeması güncelleme scripti.
Bu script, yedeklerin sıkıştırılması için gerekli sütunları ekler.
"""
import os
import sys
import logging
import sqlalchemy
from sqlalchemy import create_engine, MetaData, Table, Column, Boolean, String
from sqlalchemy.exc import SQLAlchemyError
# Logging yapılandırması
logging.basicConfig(level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
def get_database_url():
"""Veritabanı URL'sini çevre değişkeninden alır."""
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 add_compression_columns():
"""Sıkıştırma için gerekli sütunları ekler."""
try:
# Veritabanı bağlantısı
db_url = get_database_url()
engine = create_engine(db_url)
metadata = MetaData()
metadata.reflect(bind=engine)
# BackupJob tablosuna sıkıştırma sütunlarını ekle
if 'backup_job' in metadata.tables:
backup_job = metadata.tables['backup_job']
with engine.begin() as connection:
# compress_backup sütunu ekle (varsa kontrol et)
if 'compress_backup' not in backup_job.columns:
connection.execute(sqlalchemy.text(
"ALTER TABLE backup_job ADD COLUMN compress_backup BOOLEAN DEFAULT TRUE"
))
logger.info("compress_backup sütunu eklendi.")
else:
logger.info("compress_backup sütunu zaten mevcut.")
# compression_type sütunu ekle (varsa kontrol et)
if 'compression_type' not in backup_job.columns:
connection.execute(sqlalchemy.text(
"ALTER TABLE backup_job ADD COLUMN compression_type VARCHAR(16) DEFAULT 'zip'"
))
logger.info("compression_type sütunu eklendi.")
else:
logger.info("compression_type sütunu zaten mevcut.")
logger.info("Yedek işleri tablosuna sıkıştırma sütunları başarıyla eklendi.")
return True
else:
logger.error("backup_job tablosu bulunamadı!")
return False
except SQLAlchemyError as e:
logger.error(f"Veritabanı hatası: {str(e)}")
return False
except Exception as e:
logger.error(f"Beklenmeyen hata: {str(e)}")
return False
def main():
"""Ana fonksiyon"""
try:
logger.info("Veritabanı şemasına sıkıştırma sütunları ekleniyor...")
if add_compression_columns():
logger.info("Veritabanı şeması başarıyla güncellendi.")
return 0
else:
logger.error("Veritabanı şeması güncellenemedi!")
return 1
except Exception as e:
logger.error(f"İşlem sırasında hata oluştu: {str(e)}")
return 1
if __name__ == "__main__":
sys.exit(main())