#!/bin/sh # Dump all homelab databases to /config/backup/dumps (gzip SQL). # Runs inside backup_scheduler; needs docker.sock. set -eu DUMP_ROOT=/dumps STAMP=$(date +%Y%m%d-%H%M%S) DIR="${DUMP_ROOT}/${STAMP}" mkdir -p "${DIR}" log() { echo "[backup-dump ${STAMP}] $*"; } dump_postgres() { name="$1" user="$2" db="$3" if ! docker ps --format '{{.Names}}' | grep -qx "${name}"; then log "skip ${name} (not running)" return 0 fi log "dump ${name} → ${db}" docker exec "${name}" pg_dump -U "${user}" "${db}" | gzip -c > "${DIR}/${name}.sql.gz" } dump_mariadb() { name="$1" db="$2" if ! docker ps --format '{{.Names}}' | grep -qx "${name}"; then log "skip ${name} (not running)" return 0 fi log "dump ${name} → ${db}" docker exec "${name}" sh -c "mariadb-dump -u root -p\"\$MYSQL_ROOT_PASSWORD\" \"${db}\"" \ | gzip -c > "${DIR}/${name}.sql.gz" } log "starting database dumps → ${DIR}" dump_postgres postgres_gitea gitea gitea dump_postgres postgres_plane plane plane dump_postgres postgres_authentik authentik authentik dump_postgres postgres_famapp famapp famapp dump_postgres postgres_resume postgres postgres dump_mariadb mariadb_bookstack bookstack dump_mariadb owncloud_mariadb owncloud dump_mariadb romm-db romm find "${DUMP_ROOT}" -mindepth 1 -maxdepth 1 -type d -mtime +14 -exec rm -rf {} + 2>/dev/null || true log "done"