\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_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_log_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_log_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_log_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()