- Add bash scripts for automated database backup and restore - Support both full and data-only backups - Add npm scripts for easy database management - Add backups/ directory to .gitignore - Include documentation for backup procedures 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
139 lines
No EOL
4 KiB
Bash
Executable file
139 lines
No EOL
4 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# List Database Backups Script
|
|
# Usage: ./scripts/list-backups.sh [all|local|remote|recent]
|
|
|
|
set -e
|
|
|
|
# Colors for output
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
BACKUP_DIR="./backups"
|
|
|
|
# Check if backup directory exists
|
|
if [ ! -d "$BACKUP_DIR" ]; then
|
|
echo "No backups directory found. Run a backup first."
|
|
exit 1
|
|
fi
|
|
|
|
# Function to format file size
|
|
format_size() {
|
|
local size=$1
|
|
if [ $size -lt 1024 ]; then
|
|
echo "${size}B"
|
|
elif [ $size -lt 1048576 ]; then
|
|
echo "$((size/1024))KB"
|
|
elif [ $size -lt 1073741824 ]; then
|
|
echo "$((size/1048576))MB"
|
|
else
|
|
echo "$((size/1073741824))GB"
|
|
fi
|
|
}
|
|
|
|
# Function to list backups
|
|
list_backups() {
|
|
local pattern=$1
|
|
local title=$2
|
|
|
|
echo -e "${GREEN}${title}${NC}"
|
|
echo "----------------------------------------"
|
|
|
|
local count=0
|
|
while IFS= read -r file; do
|
|
if [ -f "$file" ]; then
|
|
local filename=$(basename "$file")
|
|
local size=$(stat -f%z "$file" 2>/dev/null || stat -c%s "$file" 2>/dev/null)
|
|
local formatted_size=$(format_size $size)
|
|
local modified=$(stat -f "%Sm" -t "%Y-%m-%d %H:%M:%S" "$file" 2>/dev/null || stat -c "%y" "$file" 2>/dev/null | cut -d' ' -f1-2)
|
|
|
|
# Extract type and timestamp from filename
|
|
local type=$(echo $filename | cut -d'_' -f1)
|
|
local timestamp=$(echo $filename | grep -oE '[0-9]{8}_[0-9]{6}')
|
|
|
|
# Format timestamp
|
|
if [ ! -z "$timestamp" ]; then
|
|
local date_part=$(echo $timestamp | cut -d'_' -f1)
|
|
local time_part=$(echo $timestamp | cut -d'_' -f2)
|
|
local formatted_date="${date_part:0:4}-${date_part:4:2}-${date_part:6:2}"
|
|
local formatted_time="${time_part:0:2}:${time_part:2:2}:${time_part:4:2}"
|
|
local display_time="$formatted_date $formatted_time"
|
|
else
|
|
local display_time=$modified
|
|
fi
|
|
|
|
# Color code by type
|
|
case $type in
|
|
"local")
|
|
echo -e "${BLUE}$filename${NC}"
|
|
;;
|
|
"remote")
|
|
echo -e "${YELLOW}$filename${NC}"
|
|
;;
|
|
*)
|
|
echo "$filename"
|
|
;;
|
|
esac
|
|
echo " Size: $formatted_size | Created: $display_time"
|
|
echo ""
|
|
|
|
count=$((count + 1))
|
|
fi
|
|
done < <(ls -t $BACKUP_DIR/$pattern 2>/dev/null)
|
|
|
|
if [ $count -eq 0 ]; then
|
|
echo "No backups found"
|
|
else
|
|
echo "Total: $count backup(s)"
|
|
fi
|
|
echo ""
|
|
}
|
|
|
|
# Calculate total backup size
|
|
calculate_total_size() {
|
|
local total=0
|
|
for file in $BACKUP_DIR/*.sql.gz; do
|
|
if [ -f "$file" ]; then
|
|
local size=$(stat -f%z "$file" 2>/dev/null || stat -c%s "$file" 2>/dev/null)
|
|
total=$((total + size))
|
|
fi
|
|
done
|
|
echo $(format_size $total)
|
|
}
|
|
|
|
# Main logic
|
|
case "${1:-all}" in
|
|
"all")
|
|
list_backups "*.sql.gz" "All Backups"
|
|
echo -e "${GREEN}Total backup size: $(calculate_total_size)${NC}"
|
|
;;
|
|
"local")
|
|
list_backups "local*.sql.gz" "Local Backups"
|
|
;;
|
|
"remote")
|
|
list_backups "remote*.sql.gz" "Remote Backups"
|
|
;;
|
|
"recent")
|
|
echo -e "${GREEN}Recent Backups (last 5)${NC}"
|
|
echo "----------------------------------------"
|
|
ls -lht $BACKUP_DIR/*.sql.gz 2>/dev/null | head -5 || echo "No backups found"
|
|
;;
|
|
*)
|
|
echo "Usage: $0 [all|local|remote|recent]"
|
|
echo ""
|
|
echo "Options:"
|
|
echo " all - List all backups (default)"
|
|
echo " local - List only local database backups"
|
|
echo " remote - List only remote database backups"
|
|
echo " recent - Show 5 most recent backups"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
# Show legend
|
|
echo ""
|
|
echo "Legend:"
|
|
echo -e " ${BLUE}Blue${NC} = Local database backup"
|
|
echo -e " ${YELLOW}Yellow${NC} = Remote database backup" |