\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/DatabaseBackupMasterv7/
(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/DatabaseBackupMasterv7/add_incremental_backup_columns.py


#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
yedekleDB24 için veritabanı şeması güncelleme scripti.
Bu script, artırımlı yedekleme için gerekli sütunları ekler.
"""

import os
import sys
import logging
import psycopg2
from dotenv import load_dotenv

# Loglama ayarları
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)

def get_database_url():
    """Veritabanı URL'sini çevre değişkeninden alır."""
    # .env dosyasını yükle (varsa)
    load_dotenv()
    
    # Çevre değişkenlerinden veritabanı bağlantı bilgilerini al
    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_incremental_backup_columns():
    """Artırımlı yedekleme için gerekli sütunları ekler."""
    db_url = get_database_url()
    
    try:
        # Veritabanına bağlan
        conn = psycopg2.connect(db_url)
        cursor = conn.cursor()
        
        # İşlemleri bir transaction içinde yap
        cursor.execute("BEGIN;")
        
        # backup_job tablosuna backup_method ve xtrabackup_options sütunlarını ekle
        cursor.execute("""
        ALTER TABLE backup_job
        ADD COLUMN IF NOT EXISTS backup_method VARCHAR(16) DEFAULT 'full';
        """)
        
        cursor.execute("""
        ALTER TABLE backup_job
        ADD COLUMN IF NOT EXISTS xtrabackup_options TEXT DEFAULT NULL;
        """)
        
        # backup_log tablosuna backup_method ve parent_backup_id sütunlarını ekle
        cursor.execute("""
        ALTER TABLE backup_log
        ADD COLUMN IF NOT EXISTS backup_method VARCHAR(16) DEFAULT 'full';
        """)
        
        cursor.execute("""
        ALTER TABLE backup_log
        ADD COLUMN IF NOT EXISTS parent_backup_id INTEGER DEFAULT NULL;
        """)
        
        # Constraint'in var olup olmadığını kontrol et
        cursor.execute("""
        SELECT 1 FROM pg_constraint WHERE conname = 'fk_parent_backup';
        """)
        constraint_exists = cursor.fetchone()
        
        # Constraint yoksa ekle
        if not constraint_exists:
            cursor.execute("""
            ALTER TABLE backup_log
            ADD CONSTRAINT fk_parent_backup
            FOREIGN KEY (parent_backup_id) REFERENCES backup_log(id) 
            ON DELETE SET NULL;
            """)
        
        # Transaction'ı tamamla
        cursor.execute("COMMIT;")
        
        logger.info("Artırımlı yedekleme sütunları başarıyla eklendi.")
        
        # Cursoru kapat
        cursor.close()
        
    except Exception as e:
        logger.error(f"Sütun ekleme hatası: {str(e)}")
        return False
    finally:
        # Bağlantıyı kapat
        if 'conn' in locals() and conn is not None:
            conn.close()
    
    return True

def main():
    """Ana fonksiyon"""
    logger.info("Artırımlı yedekleme sütunları ekleniyor...")
    
    if add_incremental_backup_columns():
        logger.info("Veritabanı şeması başarıyla güncellendi.")
    else:
        logger.error("Veritabanı şeması güncellenemedi.")
        sys.exit(1)

if __name__ == "__main__":
    main()

© KUJUNTI.ID