divan/deploy/backup.sh
Anas Rashid 06f56012ec Backups, restore and rollback runbook (#10, #12)
- deploy/backup.sh / deploy/restore.sh (compose service or local container; side-by-side test restore)
- restore: chown copied backup for sqlservr, fail loudly on unreadable file list
- README: update, backup, test-restore and rollback steps

Validated locally: backup 194 MB, restored into a test DB with identical counts, test DB dropped.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 00:27:31 +02:00

21 lines
929 B
Bash
Executable File

#!/usr/bin/env bash
# Back up the Diwan SQL Server database to ./backups/diwan-<UTC timestamp>.bak
# deploy/backup.sh (docker-compose stack: service "db")
# DB_CONTAINER=diwan-mssql deploy/backup.sh (local run-local.sh container)
# Needs MSSQL_SA_PASSWORD (read from .env when present).
set -euo pipefail
cd "$(dirname "$0")/.."
[ -f .env ] && set -a && . ./.env && set +a
: "${MSSQL_SA_PASSWORD:?set MSSQL_SA_PASSWORD}"
DB=${DB_NAME:-diwan}
C=${DB_CONTAINER:-$(docker compose ps -q db)}
STAMP=$(date -u +%Y%m%dT%H%M%SZ)
FILE=/var/opt/mssql/backup/$DB-$STAMP.bak
docker exec "$C" mkdir -p /var/opt/mssql/backup
docker exec "$C" /opt/mssql-tools18/bin/sqlcmd -C -b -S localhost -U sa -P "$MSSQL_SA_PASSWORD" \
-Q "BACKUP DATABASE [$DB] TO DISK = N'$FILE' WITH INIT, CHECKSUM"
mkdir -p backups
docker cp "$C:$FILE" "backups/$DB-$STAMP.bak"
docker exec "$C" rm -f "$FILE"
echo "backups/$DB-$STAMP.bak"