COBY : specs + task 1
This commit is contained in:
108
COBY/docker/backup.sh
Normal file
108
COBY/docker/backup.sh
Normal file
@ -0,0 +1,108 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Backup script for market data infrastructure
|
||||
# Run this script regularly to backup your data
|
||||
|
||||
set -e
|
||||
|
||||
# Configuration
|
||||
BACKUP_DIR="./backups"
|
||||
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
|
||||
RETENTION_DAYS=30
|
||||
|
||||
# Load environment variables
|
||||
if [ -f .env ]; then
|
||||
source .env
|
||||
fi
|
||||
|
||||
echo "🗄️ Starting backup process..."
|
||||
|
||||
# Create backup directory if it doesn't exist
|
||||
mkdir -p "$BACKUP_DIR"
|
||||
|
||||
# Backup TimescaleDB
|
||||
echo "📊 Backing up TimescaleDB..."
|
||||
docker exec market_data_timescaledb pg_dump \
|
||||
-U market_user \
|
||||
-d market_data \
|
||||
--verbose \
|
||||
--no-password \
|
||||
--format=custom \
|
||||
--compress=9 \
|
||||
> "$BACKUP_DIR/timescaledb_backup_$TIMESTAMP.dump"
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "✅ TimescaleDB backup completed: timescaledb_backup_$TIMESTAMP.dump"
|
||||
else
|
||||
echo "❌ TimescaleDB backup failed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Backup Redis
|
||||
echo "📦 Backing up Redis..."
|
||||
docker exec market_data_redis redis-cli \
|
||||
-a "$REDIS_PASSWORD" \
|
||||
--rdb /data/redis_backup_$TIMESTAMP.rdb \
|
||||
BGSAVE
|
||||
|
||||
# Wait for Redis backup to complete
|
||||
sleep 5
|
||||
|
||||
# Copy Redis backup from container
|
||||
docker cp market_data_redis:/data/redis_backup_$TIMESTAMP.rdb "$BACKUP_DIR/"
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "✅ Redis backup completed: redis_backup_$TIMESTAMP.rdb"
|
||||
else
|
||||
echo "❌ Redis backup failed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Create backup metadata
|
||||
cat > "$BACKUP_DIR/backup_$TIMESTAMP.info" << EOF
|
||||
Backup Information
|
||||
==================
|
||||
Timestamp: $TIMESTAMP
|
||||
Date: $(date)
|
||||
TimescaleDB Backup: timescaledb_backup_$TIMESTAMP.dump
|
||||
Redis Backup: redis_backup_$TIMESTAMP.rdb
|
||||
|
||||
Container Versions:
|
||||
TimescaleDB: $(docker exec market_data_timescaledb psql -U market_user -d market_data -t -c "SELECT version();")
|
||||
Redis: $(docker exec market_data_redis redis-cli -a "$REDIS_PASSWORD" INFO server | grep redis_version)
|
||||
|
||||
Database Size:
|
||||
$(docker exec market_data_timescaledb psql -U market_user -d market_data -c "\l+")
|
||||
EOF
|
||||
|
||||
# Compress backups
|
||||
echo "🗜️ Compressing backups..."
|
||||
tar -czf "$BACKUP_DIR/market_data_backup_$TIMESTAMP.tar.gz" \
|
||||
-C "$BACKUP_DIR" \
|
||||
"timescaledb_backup_$TIMESTAMP.dump" \
|
||||
"redis_backup_$TIMESTAMP.rdb" \
|
||||
"backup_$TIMESTAMP.info"
|
||||
|
||||
# Remove individual files after compression
|
||||
rm "$BACKUP_DIR/timescaledb_backup_$TIMESTAMP.dump"
|
||||
rm "$BACKUP_DIR/redis_backup_$TIMESTAMP.rdb"
|
||||
rm "$BACKUP_DIR/backup_$TIMESTAMP.info"
|
||||
|
||||
echo "✅ Compressed backup created: market_data_backup_$TIMESTAMP.tar.gz"
|
||||
|
||||
# Clean up old backups
|
||||
echo "🧹 Cleaning up old backups (older than $RETENTION_DAYS days)..."
|
||||
find "$BACKUP_DIR" -name "market_data_backup_*.tar.gz" -mtime +$RETENTION_DAYS -delete
|
||||
|
||||
# Display backup information
|
||||
BACKUP_SIZE=$(du -h "$BACKUP_DIR/market_data_backup_$TIMESTAMP.tar.gz" | cut -f1)
|
||||
echo ""
|
||||
echo "📋 Backup Summary:"
|
||||
echo " File: market_data_backup_$TIMESTAMP.tar.gz"
|
||||
echo " Size: $BACKUP_SIZE"
|
||||
echo " Location: $BACKUP_DIR"
|
||||
echo ""
|
||||
echo "🔄 To restore from this backup:"
|
||||
echo " ./restore.sh market_data_backup_$TIMESTAMP.tar.gz"
|
||||
echo ""
|
||||
echo "✅ Backup process completed successfully!"
|
Reference in New Issue
Block a user