From 2f24224f8a2ed842725ada2109f95ed30a9cbc24 Mon Sep 17 00:00:00 2001 From: ecki Date: Wed, 17 Jun 2026 18:42:23 +0200 Subject: [PATCH] Db backup Script --- README.md | 15 +++++++++++++++ scripts/backup-db.sh | 30 ++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100755 scripts/backup-db.sh diff --git a/README.md b/README.md index 1dc6c7c..47a4642 100644 --- a/README.md +++ b/README.md @@ -90,6 +90,21 @@ docker compose up -d --build backend - Frontend/API intern: `http://127.0.0.1:3000/resman/` - Fuer produktive Nutzung ist ein Reverse Proxy davor vorgesehen +### 5. Datenbank Backup + +```bash +./scripts/backup-db.sh +``` + +Backups werden unter `backups/` als gzip-komprimierter SQL-Dump abgelegt. +Standardmaessig werden Backups nach 30 Tagen geloescht. + +Optionale Variablen: + +```bash +BACKUP_DIR=/pfad/zum/backup KEEP_DAYS=90 ./scripts/backup-db.sh +``` + 🗄️ Datenbank Schema resources diff --git a/scripts/backup-db.sh b/scripts/backup-db.sh new file mode 100755 index 0000000..d733082 --- /dev/null +++ b/scripts/backup-db.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +BACKUP_DIR="${BACKUP_DIR:-$ROOT_DIR/backups}" +DB_SERVICE="${DB_SERVICE:-db}" +DB_NAME="${DB_NAME:-resource_manager}" +DB_USER="${DB_USER:-resman}" +DB_PASSWORD="${DB_PASSWORD:-resmanpass}" +KEEP_DAYS="${KEEP_DAYS:-30}" +TIMESTAMP="$(date +%Y%m%d-%H%M%S)" +BACKUP_FILE="$BACKUP_DIR/${DB_NAME}-${TIMESTAMP}.sql" + +mkdir -p "$BACKUP_DIR" + +cd "$ROOT_DIR" + +echo "Creating database backup: $BACKUP_FILE" + +docker compose exec -T "$DB_SERVICE" sh -c \ + "MARIADB_PWD='$DB_PASSWORD' mariadb-dump --single-transaction --quick --routines --triggers -u '$DB_USER' '$DB_NAME'" \ + > "$BACKUP_FILE" + +gzip "$BACKUP_FILE" + +if [[ "$KEEP_DAYS" =~ ^[0-9]+$ ]] && [[ "$KEEP_DAYS" -gt 0 ]]; then + find "$BACKUP_DIR" -name "${DB_NAME}-*.sql.gz" -type f -mtime +"$KEEP_DAYS" -delete +fi + +echo "Backup finished: ${BACKUP_FILE}.gz"