\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/DatabaseBackupMasterv3/ |
|
B-Con CMD Config cPanel C-Rdp D-Log Info Jump Mass Ransom Symlink vHost Zone-H |
| Current File : /var/www/html/yedekledb24/DatabaseBackupMasterv3/import_database.py |
#!/usr/bin/env python3
"""
Database Backup Sistemi için veritabanı içe aktarım scripti.
Bu script, SQL formatındaki bir yedeği PostgreSQL veritabanına geri yükler.
"""
import os
import sys
import subprocess
from dotenv import load_dotenv
# .env dosyasından ortam değişkenlerini yükleyin
load_dotenv()
# Veritabanı bilgilerini alın
DB_HOST = os.environ.get('PGHOST', 'localhost')
DB_PORT = os.environ.get('PGPORT', '5432')
DB_USER = os.environ.get('PGUSER', 'postgres')
DB_PASSWORD = os.environ.get('PGPASSWORD', 'postgres')
DB_NAME = os.environ.get('PGDATABASE', 'postgres')
def main():
"""Ana fonksiyon - SQL dosyasını veritabanına içe aktarır (restore eder)"""
# Komut satırı argümanlarını kontrol edin
if len(sys.argv) < 2:
print("Kullanım: python import_database.py <sql_dosyası>")
print("Örnek: python import_database.py database_backups/backup_postgres_20250322_123045.sql")
sys.exit(1)
# SQL dosya yolunu alın
sql_file = sys.argv[1]
# Dosyanın varlığını kontrol edin
if not os.path.exists(sql_file):
print(f"Hata: Dosya bulunamadı: {sql_file}")
sys.exit(1)
# psql için ortam değişkenlerini ayarlayın
env = os.environ.copy()
env['PGPASSWORD'] = DB_PASSWORD
# psql komutunu oluşturun
psql_cmd = [
'psql',
f'--host={DB_HOST}',
f'--port={DB_PORT}',
f'--username={DB_USER}',
'--set', 'ON_ERROR_STOP=on',
'--echo-errors',
f'--dbname={DB_NAME}',
'--file', sql_file
]
try:
# Kullanıcıya bilgi verin
print(f"Veritabanına içe aktarılıyor: {sql_file} -> {DB_NAME}")
# Komutu çalıştırın
process = subprocess.run(psql_cmd, env=env, check=True,
stdout=subprocess.PIPE, stderr=subprocess.PIPE,
text=True)
# Başarılı oldu mu kontrol edin
print(f"Veritabanı başarıyla içe aktarıldı: {DB_NAME}")
if process.stdout:
# Çıktıyı sınırlayın (çok uzun olabilir)
output_lines = process.stdout.split('\n')
if len(output_lines) > 20:
print(f"Çıktı (ilk 20 satır):")
for line in output_lines[:20]:
print(line)
print(f"... ve {len(output_lines) - 20} satır daha")
else:
print(f"Çıktı:")
print(process.stdout)
except subprocess.CalledProcessError as e:
print(f"Hata: psql işlemi başarısız oldu. Kod: {e.returncode}")
if e.stderr:
print(f"Hata detayı: {e.stderr}")
except Exception as e:
print(f"Beklenmeyen hata: {str(e)}")
if __name__ == "__main__":
main()