Files
ginnoir c053f285b8 Fix backup cron scripts for Kopia password and MariaDB dumps.
Pass KOPIA_REPOSITORY_PASSWORD into snapshot create; use MARIADB_ROOT_PASSWORD for romm and bookstack app user for bookstack root mismatch.
2026-06-10 22:01:26 -05:00

59 lines
1.7 KiB
Bash

#!/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"
}
# user: root (default) or app account (e.g. bookstack — root password may not match env)
dump_mariadb() {
name="$1"
db="$2"
user="${3:-root}"
if ! docker ps --format '{{.Names}}' | grep -qx "${name}"; then
log "skip ${name} (not running)"
return 0
fi
log "dump ${name}${db} (as ${user})"
if [ "${user}" = "root" ]; then
docker exec "${name}" sh -c "mariadb-dump -u root -p\"\${MARIADB_ROOT_PASSWORD:-\$MYSQL_ROOT_PASSWORD}\" \"${db}\"" \
| gzip -c > "${DIR}/${name}.sql.gz"
else
docker exec "${name}" sh -c "mariadb-dump -u \"${user}\" -p\"\${MYSQL_PASSWORD:-\$MARIADB_PASSWORD}\" \"${db}\"" \
| gzip -c > "${DIR}/${name}.sql.gz"
fi
}
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 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"