\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/DatabaseBackupMasterv8/ |
|
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()