akira / scripts /pg_backup.sh
akra35567's picture
Upload 2 files
c08f1c8 verified
Raw
History Blame Contribute Delete
2.47 kB
#!/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