#!/bin/bash # pg_backup.sh — Backup periódico do PostgreSQL → HF Dataset # Executa a cada 2 horas via cron ou background loop set -e BACKUP_DIR="/akira/data/cloud_sync" BACKUP_FILE="$BACKUP_DIR/akira_dump.sql" DATASET_NAME="${HF_BACKUP_DATASET:-akira-db-backup}" SYNC_INTERVAL=${BACKUP_SYNC_INTERVAL:-7200} mkdir -p "$BACKUP_DIR" backup_pg() { echo "🔄 [BACKUP] Iniciando backup do PostgreSQL..." PGPASSWORD=akira pg_dump -h localhost -U akira -d akira \ --format=custom \ --compress=9 \ --file="$BACKUP_DIR/akira_dump.custom" 2>/dev/null PGPASSWORD=akira pg_dump -h localhost -U akira -d akira \ > "$BACKUP_FILE" 2>/dev/null if [ $? -eq 0 ]; then echo "✅ [BACKUP] Dump concluído: $(du -h $BACKUP_FILE | cut -f1)" # Upload para HF Dataset se HF_TOKEN estiver configurado if [ -n "$HF_TOKEN" ]; then echo "📤 [BACKUP] Enviando para HF Dataset: $DATASET_NAME" python3 -c " import os, sys from huggingface_hub import HfApi try: api = HfApi(token='$HF_TOKEN') repo_id = os.environ.get('HF_AUTHOR', 'akra35567') + '/' + '$DATASET_NAME' api.upload_folder( folder_path='$BACKUP_DIR', repo_id=repo_id, repo_type='dataset', allow_patterns=['akira_dump.*'], ) print('✅ [BACKUP] Upload concluído') except Exception as e: print(f'⚠️ [BACKUP] Upload falhou: {e}') " 2>/dev/null || echo "⚠️ [BACKUP] Upload pulado" fi else echo "❌ [BACKUP] Dump falhou" fi } restore_pg() { echo "📥 [RESTORE] Verificando backup para restaurar..." if [ -f "$BACKUP_FILE" ]; then echo "📥 [RESTORE] Restaurando backup..." PGPASSWORD=akira psql -h localhost -U akira -d akira -f "$BACKUP_FILE" 2>/dev/null echo "✅ [RESTORE] Concluído" elif [ -f "$BACKUP_DIR/akira_dump.custom" ]; then echo "📥 [RESTORE] Restaurando backup custom..." PGPASSWORD=akira pg_restore -h localhost -U akira -d akira "$BACKUP_DIR/akira_dump.custom" 2>/dev/null echo "✅ [RESTORE] Concluído" else echo "ℹ️ [RESTORE] Nenhum backup encontrado" fi } # Se chamado com argumento "restore" if [ "$1" = "restore" ]; then restore_pg exit 0 fi # Loop de backup periódico echo "⏱️ [BACKUP] Loop iniciado (intervalo: ${SYNC_INTERVAL}s)" while true; do backup_pg sleep $SYNC_INTERVAL done