357e68a764
- scripts/backup-db.sh: pg_dump compressed backup with table count verification, optional MinIO upload, auto-prune keeping last 7 - scripts/restore-db.sh: restore from backup with safety confirmation, scales down services during restore, re-grants permissions, scales back up with correct replica counts - scripts/backup-redis.sh: triggers BGSAVE, copies RDB dump locally, shows key stats
70 lines
2.1 KiB
Bash
Executable File
70 lines
2.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# Stonks Oracle — Redis State Backup
|
|
# Triggers a Redis BGSAVE and copies the RDB dump file locally.
|
|
# Useful before major deployments or database resets.
|
|
#
|
|
# Usage:
|
|
# ./scripts/backup-redis.sh
|
|
#
|
|
# Requires: kubectl access to the cluster
|
|
|
|
NAMESPACE_REDIS="redis-service"
|
|
REDIS_POD="redis-master-0"
|
|
REDIS_PASSWORD="${REDIS_PASSWORD:-PSCh4ng3me!}"
|
|
|
|
BACKUP_DIR="${BACKUP_DIR:-$HOME/backups/stonks-oracle}"
|
|
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
|
|
BACKUP_FILE="redis-${TIMESTAMP}.rdb"
|
|
BACKUP_PATH="${BACKUP_DIR}/${BACKUP_FILE}"
|
|
|
|
echo "=== Stonks Oracle Redis Backup ==="
|
|
echo "Timestamp: ${TIMESTAMP}"
|
|
|
|
mkdir -p "${BACKUP_DIR}"
|
|
|
|
# Trigger BGSAVE
|
|
echo "[1/3] Triggering Redis BGSAVE..."
|
|
kubectl exec -n "${NAMESPACE_REDIS}" "${REDIS_POD}" -- \
|
|
redis-cli -a "${REDIS_PASSWORD}" BGSAVE 2>/dev/null
|
|
|
|
# Wait for save to complete
|
|
echo " Waiting for background save..."
|
|
sleep 5
|
|
|
|
LAST_SAVE=$(kubectl exec -n "${NAMESPACE_REDIS}" "${REDIS_POD}" -- \
|
|
redis-cli -a "${REDIS_PASSWORD}" LASTSAVE 2>/dev/null)
|
|
echo " Last save timestamp: ${LAST_SAVE}"
|
|
|
|
# Copy the RDB file
|
|
echo "[2/3] Copying RDB dump..."
|
|
kubectl cp "${NAMESPACE_REDIS}/${REDIS_POD}:/data/dump.rdb" "${BACKUP_PATH}" 2>/dev/null || \
|
|
echo "WARNING: Could not copy RDB file (path may differ)"
|
|
|
|
if [ -f "${BACKUP_PATH}" ]; then
|
|
BACKUP_SIZE=$(du -h "${BACKUP_PATH}" | cut -f1)
|
|
echo " Size: ${BACKUP_SIZE}"
|
|
else
|
|
echo " RDB copy failed — checking alternative paths..."
|
|
# Try common Redis data paths
|
|
for path in /data/dump.rdb /var/lib/redis/dump.rdb /bitnami/redis/data/dump.rdb; do
|
|
kubectl cp "${NAMESPACE_REDIS}/${REDIS_POD}:${path}" "${BACKUP_PATH}" 2>/dev/null && break
|
|
done
|
|
if [ -f "${BACKUP_PATH}" ]; then
|
|
BACKUP_SIZE=$(du -h "${BACKUP_PATH}" | cut -f1)
|
|
echo " Size: ${BACKUP_SIZE}"
|
|
else
|
|
echo "WARNING: Could not locate RDB dump file"
|
|
fi
|
|
fi
|
|
|
|
# Show key stats
|
|
echo "[3/3] Redis key stats..."
|
|
kubectl exec -n "${NAMESPACE_REDIS}" "${REDIS_POD}" -- \
|
|
redis-cli -a "${REDIS_PASSWORD}" INFO keyspace 2>/dev/null | grep "^db"
|
|
|
|
echo ""
|
|
echo "=== Redis backup complete ==="
|
|
echo "File: ${BACKUP_PATH}"
|