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
106 lines
3.7 KiB
Bash
Executable File
106 lines
3.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# Stonks Oracle — Database Restore
|
|
# Restores a pg_dump backup into the stonks database.
|
|
#
|
|
# Usage:
|
|
# ./scripts/restore-db.sh <backup-file.sql.gz>
|
|
# ./scripts/restore-db.sh ~/backups/stonks-oracle/stonks-20260415-180000.sql.gz
|
|
#
|
|
# WARNING: This will DROP and recreate all tables in the stonks database.
|
|
# All existing data will be replaced with the backup contents.
|
|
#
|
|
# Requires: kubectl access to the cluster
|
|
|
|
NAMESPACE_PG="postgresql-service"
|
|
PG_POD="postgresql-1"
|
|
PG_USER="postgres"
|
|
PG_DB="stonks"
|
|
|
|
if [ $# -lt 1 ]; then
|
|
echo "Usage: $0 <backup-file.sql.gz>"
|
|
echo ""
|
|
echo "Available backups:"
|
|
ls -lh "${HOME}/backups/stonks-oracle"/stonks-*.sql.gz 2>/dev/null || echo " (none found in ~/backups/stonks-oracle/)"
|
|
exit 1
|
|
fi
|
|
|
|
BACKUP_FILE="$1"
|
|
|
|
if [ ! -f "${BACKUP_FILE}" ]; then
|
|
echo "ERROR: Backup file not found: ${BACKUP_FILE}"
|
|
exit 1
|
|
fi
|
|
|
|
BACKUP_SIZE=$(du -h "${BACKUP_FILE}" | cut -f1)
|
|
TABLE_COUNT=$(zcat "${BACKUP_FILE}" | grep -c "^CREATE TABLE" || true)
|
|
|
|
echo "=== Stonks Oracle Database Restore ==="
|
|
echo "Backup file: ${BACKUP_FILE}"
|
|
echo "File size: ${BACKUP_SIZE}"
|
|
echo "Tables: ${TABLE_COUNT}"
|
|
echo ""
|
|
echo "WARNING: This will replace ALL data in the '${PG_DB}' database."
|
|
echo ""
|
|
read -p "Are you sure? Type 'yes' to continue: " CONFIRM
|
|
|
|
if [ "${CONFIRM}" != "yes" ]; then
|
|
echo "Aborted."
|
|
exit 0
|
|
fi
|
|
|
|
# Terminate active connections to the database
|
|
echo "[1/4] Terminating active connections..."
|
|
kubectl exec -n "${NAMESPACE_PG}" "${PG_POD}" -c postgres -- \
|
|
psql -U "${PG_USER}" -c \
|
|
"SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = '${PG_DB}' AND pid <> pg_backend_pid();" \
|
|
2>/dev/null || true
|
|
|
|
# Scale down all stonks-oracle deployments to prevent reconnections
|
|
echo "[2/4] Scaling down stonks-oracle services..."
|
|
for dep in $(kubectl get deployments -n stonks-oracle -o name 2>/dev/null); do
|
|
kubectl scale -n stonks-oracle "$dep" --replicas=0 2>/dev/null || true
|
|
done
|
|
echo " Waiting for pods to terminate..."
|
|
sleep 10
|
|
|
|
# Restore the backup
|
|
echo "[3/4] Restoring database from backup..."
|
|
zcat "${BACKUP_FILE}" | kubectl exec -i -n "${NAMESPACE_PG}" "${PG_POD}" -c postgres -- \
|
|
psql -U "${PG_USER}" -d "${PG_DB}" --single-transaction 2>&1 | \
|
|
grep -v "^SET$\|^COMMENT$\|^ALTER\|^DROP\|^CREATE\|^--" | head -20
|
|
|
|
# Re-grant permissions to the stonks user
|
|
echo " Re-granting permissions..."
|
|
kubectl exec -n "${NAMESPACE_PG}" "${PG_POD}" -c postgres -- \
|
|
psql -U "${PG_USER}" -d "${PG_DB}" -c "
|
|
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO stonks;
|
|
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO stonks;
|
|
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO stonks;
|
|
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO stonks;
|
|
"
|
|
|
|
# Verify restore
|
|
echo " Verifying..."
|
|
RESTORED_TABLES=$(kubectl exec -n "${NAMESPACE_PG}" "${PG_POD}" -c postgres -- \
|
|
psql -U "${PG_USER}" -d "${PG_DB}" -t -c \
|
|
"SELECT count(*) FROM information_schema.tables WHERE table_schema = 'public' AND table_type = 'BASE TABLE';" | tr -d ' ')
|
|
echo " Restored tables: ${RESTORED_TABLES}"
|
|
|
|
# Scale services back up
|
|
echo "[4/4] Scaling stonks-oracle services back up..."
|
|
for dep in $(kubectl get deployments -n stonks-oracle -o name 2>/dev/null); do
|
|
kubectl scale -n stonks-oracle "$dep" --replicas=1 2>/dev/null || true
|
|
done
|
|
|
|
# Scale ingestion and parser to 2 replicas
|
|
kubectl scale -n stonks-oracle deployment/ingestion --replicas=2 2>/dev/null || true
|
|
kubectl scale -n stonks-oracle deployment/parser --replicas=2 2>/dev/null || true
|
|
|
|
echo ""
|
|
echo "=== Restore complete ==="
|
|
echo "Tables restored: ${RESTORED_TABLES}"
|
|
echo "Services are scaling back up. Check with:"
|
|
echo " kubectl get pods -n stonks-oracle"
|