From 030234a7e4b39052c08ab62ee908e9c901a73f79 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 26 Jun 2026 17:54:30 +0200 Subject: [PATCH] db volume backup --- backupdb/.c | 1 + build/docker-compose.yaml | 2 +- build/docker-compose.yaml.v1.3 | 2 +- build/env/presense-bridge.env | 2 +- scripts/db_backup.sh | 33 +++++++++++++++++++++ scripts/db_restore.sh | 52 ++++++++++++++++++++++++++++++++++ 6 files changed, 89 insertions(+), 3 deletions(-) create mode 100644 backupdb/.c create mode 100755 scripts/db_backup.sh create mode 100755 scripts/db_restore.sh diff --git a/backupdb/.c b/backupdb/.c new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/backupdb/.c @@ -0,0 +1 @@ + diff --git a/build/docker-compose.yaml b/build/docker-compose.yaml index 0e7d5b9..b081e51 100644 --- a/build/docker-compose.yaml +++ b/build/docker-compose.yaml @@ -14,7 +14,7 @@ services: retries: 5 start_period: 30s volumes: - - pgdata:/var/postgresql/data + - pgdata:/var/lib/postgresql kafdrop: image: obsidiandynamics/kafdrop diff --git a/build/docker-compose.yaml.v1.3 b/build/docker-compose.yaml.v1.3 index 0e7d5b9..b081e51 100644 --- a/build/docker-compose.yaml.v1.3 +++ b/build/docker-compose.yaml.v1.3 @@ -14,7 +14,7 @@ services: retries: 5 start_period: 30s volumes: - - pgdata:/var/postgresql/data + - pgdata:/var/lib/postgresql kafdrop: image: obsidiandynamics/kafdrop diff --git a/build/env/presense-bridge.env b/build/env/presense-bridge.env index d1351a5..9b012e8 100644 --- a/build/env/presense-bridge.env +++ b/build/env/presense-bridge.env @@ -1,5 +1,5 @@ KAFKA_URL=kafka:29092 -MQTT_HOST=127.0.0.1 +MQTT_HOST=10.254.254.1 MQTT_USERNAME=user MQTT_PASSWORD=pass MQTT_CLIENT_ID=bridge diff --git a/scripts/db_backup.sh b/scripts/db_backup.sh new file mode 100755 index 0000000..b932683 --- /dev/null +++ b/scripts/db_backup.sh @@ -0,0 +1,33 @@ +#!/bin/bash +set -e + +# Percorso del file delle variabili d'ambiente +ENV_FILE="/data/conf/presence/res_levis_backend/build/env/db.env" + +# Estrazione dinamica della password dal file .env +if [ -f "$ENV_FILE" ]; then + DB_PASSWORD=$(grep -E "^POSTGRES_PASSWORD=" "$ENV_FILE" | cut -d'=' -f2) +else + echo "Errore: File d'ambiente non trovato in $ENV_FILE" + exit 1 +fi + +# Configurazione percorso di salvataggio del backup sull'host +BACKUP_DIR="/data/conf/presence/res_levis_backend/backupdb" +TIMESTAMP=$(date +"%Y%m%d_%H%M%S") +BACKUP_FILE="${BACKUP_DIR}/presence_db_${TIMESTAMP}.sql.gz" + +# Crea la cartella di backup se non esiste +mkdir -p "$BACKUP_DIR" + +echo "==========================================" +echo "AVVIO BACKUP DATABASE POSTGRESQL (DINAMICO)" +echo "==========================================" + +# Esegue il pg_dump passando la password estratta dal file .env +docker exec -t -e PGPASSWORD="$DB_PASSWORD" db pg_dump -U postgres postgres | gzip > "$BACKUP_FILE" + +echo "Backup completato con successo!" +echo "File salvato in: $BACKUP_FILE" +echo "Dimensione file: $(du -sh "$BACKUP_FILE" | cut -f1)" +echo "==========================================" diff --git a/scripts/db_restore.sh b/scripts/db_restore.sh new file mode 100755 index 0000000..3306c7c --- /dev/null +++ b/scripts/db_restore.sh @@ -0,0 +1,52 @@ +#!/bin/bash +set -e + +# Verifica se è stato passato il file di backup come argomento +if [ -z "$1" ]; then + echo "Errore: Devi specificare il percorso del file di backup .sql.gz" + echo "Uso: $0 /percorso/al/file_backup.sql.gz" + exit 1 +fi + +BACKUP_FILE="$1" + +# Verifica se il file esiste sul file system +if [ ! -f "$BACKUP_FILE" ]; then + echo "Errore: Il file di backup specificato non esiste: $BACKUP_FILE" + exit 1 +fi + +# Percorso del file delle variabili d'ambiente +ENV_FILE="/data/conf/presence/res_levis_backend/build/env/db.env" + +# Estrazione dinamica della password dal file .env +if [ -f "$ENV_FILE" ]; then + DB_PASSWORD=$(grep -E "^POSTGRES_PASSWORD=" "$ENV_FILE" | cut -d'=' -f2) +else + echo "Errore: File d'ambiente non trovato in $ENV_FILE" + exit 1 +fi + +echo "==========================================" +echo "AVVIO RIPRISTINO DATABASE (DINAMICO)" +echo "ATTENZIONE: Questo sovrascriverà i dati correnti!" +echo "==========================================" +echo "File di origine: $BACKUP_FILE" +echo "------------------------------------------" + +# Pulisce le connessioni attive per evitare blocchi sul drop del database +echo "1. Chiusura connessioni attive..." +docker exec -t -e PGPASSWORD="$DB_PASSWORD" db psql -U postgres -c "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'postgres' AND pid <> pg_backend_pid();" > /dev/null + +# Resetta il database postgres e lo ricrea vuoto +echo "2. Reset e ricreazione database..." +docker exec -t -e PGPASSWORD="$DB_PASSWORD" db dropdb -U postgres --if-exists postgres +docker exec -t -e PGPASSWORD="$DB_PASSWORD" db createdb -U postgres postgres + +# Decomprime il file e lo inietta direttamente nel psql del container +echo "3. Importazione dati in corso..." +gunzip -c "$BACKUP_FILE" | docker exec -i -e PGPASSWORD="$DB_PASSWORD" db psql -U postgres -d postgres > /dev/null + +echo "------------------------------------------" +echo "Ripristino completato con successo!" +echo "=========================================="