Bläddra i källkod

db volume backup

master
root 1 dag sedan
förälder
incheckning
030234a7e4
6 ändrade filer med 89 tillägg och 3 borttagningar
  1. +1
    -0
      backupdb/.c
  2. +1
    -1
      build/docker-compose.yaml
  3. +1
    -1
      build/docker-compose.yaml.v1.3
  4. +1
    -1
      build/env/presense-bridge.env
  5. +33
    -0
      scripts/db_backup.sh
  6. +52
    -0
      scripts/db_restore.sh

+ 1
- 0
backupdb/.c Visa fil

@@ -0,0 +1 @@


+ 1
- 1
build/docker-compose.yaml Visa fil

@@ -14,7 +14,7 @@ services:
retries: 5
start_period: 30s
volumes:
- pgdata:/var/postgresql/data
- pgdata:/var/lib/postgresql

kafdrop:
image: obsidiandynamics/kafdrop


+ 1
- 1
build/docker-compose.yaml.v1.3 Visa fil

@@ -14,7 +14,7 @@ services:
retries: 5
start_period: 30s
volumes:
- pgdata:/var/postgresql/data
- pgdata:/var/lib/postgresql

kafdrop:
image: obsidiandynamics/kafdrop


+ 1
- 1
build/env/presense-bridge.env Visa fil

@@ -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

+ 33
- 0
scripts/db_backup.sh Visa fil

@@ -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 "=========================================="

+ 52
- 0
scripts/db_restore.sh Visa fil

@@ -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 "=========================================="

Laddar…
Avbryt
Spara