48 lines
1.0 KiB
Bash
Executable File
48 lines
1.0 KiB
Bash
Executable File
#!/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"
|
|
|
|
cleanup_failed_dump() {
|
|
if [[ -f "$BACKUP_FILE" ]]; then
|
|
rm -f "$BACKUP_FILE"
|
|
fi
|
|
}
|
|
|
|
trap cleanup_failed_dump ERR
|
|
|
|
docker compose exec -T "$DB_SERVICE" \
|
|
mariadb-dump \
|
|
--single-transaction \
|
|
--quick \
|
|
--routines \
|
|
--triggers \
|
|
--user="$DB_USER" \
|
|
--password="$DB_PASSWORD" \
|
|
"$DB_NAME" \
|
|
> "$BACKUP_FILE"
|
|
|
|
trap - ERR
|
|
|
|
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"
|