
Some checks failed
CI/CD Pipeline / Test Suite (push) Has been cancelled
CI/CD Pipeline / Security Audit (push) Has been cancelled
CI/CD Pipeline / Build Docker Image (push) Has been cancelled
CI/CD Pipeline / Deploy to Staging (push) Has been cancelled
CI/CD Pipeline / Deploy to Production (push) Has been cancelled
CI/CD Pipeline / Performance Benchmarks (push) Has been cancelled
CI/CD Pipeline / Cleanup (push) Has been cancelled
421 lines
13 KiB
Bash
Executable File
421 lines
13 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Database Management Master Script
|
|
# Central hub for all database operations and tools
|
|
|
|
set -e
|
|
|
|
# Colors for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
CYAN='\033[0;36m'
|
|
BOLD='\033[1m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Script directory
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
|
|
|
|
# Change to project root
|
|
cd "$PROJECT_ROOT"
|
|
|
|
# Logging functions
|
|
log() {
|
|
echo -e "${GREEN}[INFO]${NC} $1"
|
|
}
|
|
|
|
log_warn() {
|
|
echo -e "${YELLOW}[WARN]${NC} $1"
|
|
}
|
|
|
|
log_error() {
|
|
echo -e "${RED}[ERROR]${NC} $1"
|
|
}
|
|
|
|
log_success() {
|
|
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
|
}
|
|
|
|
print_header() {
|
|
echo -e "${BLUE}${BOLD}=== $1 ===${NC}"
|
|
}
|
|
|
|
print_subheader() {
|
|
echo -e "${CYAN}--- $1 ---${NC}"
|
|
}
|
|
|
|
print_usage() {
|
|
echo -e "${BOLD}Database Management Hub${NC}"
|
|
echo
|
|
echo "Usage: $0 <category> <command> [options]"
|
|
echo
|
|
echo -e "${BOLD}Categories:${NC}"
|
|
echo
|
|
echo -e "${CYAN}setup${NC} Database setup and initialization"
|
|
echo " setup Full database setup (create + migrate + seed)"
|
|
echo " create Create the database"
|
|
echo " migrate Run migrations"
|
|
echo " seed Seed database with test data"
|
|
echo " reset Reset database (drop + create + migrate)"
|
|
echo " status Show migration status"
|
|
echo " drop Drop the database"
|
|
echo " postgres Setup PostgreSQL database"
|
|
echo " sqlite Setup SQLite database"
|
|
echo
|
|
echo -e "${CYAN}backup${NC} Backup and restore operations"
|
|
echo " backup Create database backup"
|
|
echo " restore Restore database from backup"
|
|
echo " list List available backups"
|
|
echo " clean Clean old backups"
|
|
echo " export Export data to JSON/CSV"
|
|
echo " import Import data from JSON/CSV"
|
|
echo " clone Clone database to different name"
|
|
echo " compare Compare two databases"
|
|
echo
|
|
echo -e "${CYAN}monitor${NC} Monitoring and health checks"
|
|
echo " health Complete health check"
|
|
echo " status Quick status check"
|
|
echo " connections Show active connections"
|
|
echo " performance Show performance metrics"
|
|
echo " slow-queries Show slow queries"
|
|
echo " locks Show database locks"
|
|
echo " disk-usage Show disk usage"
|
|
echo " memory-usage Show memory usage"
|
|
echo " backup-status Check backup status"
|
|
echo " monitor Start continuous monitoring"
|
|
echo " alerts Check for alerts"
|
|
echo " vacuum Perform database maintenance"
|
|
echo " analyze Update database statistics"
|
|
echo " report Generate comprehensive report"
|
|
echo
|
|
echo -e "${CYAN}migrate${NC} Migration management"
|
|
echo " status Show migration status"
|
|
echo " pending List pending migrations"
|
|
echo " applied List applied migrations"
|
|
echo " run Run pending migrations"
|
|
echo " rollback Rollback migrations"
|
|
echo " create Create new migration"
|
|
echo " generate Generate migration from schema diff"
|
|
echo " validate Validate migration files"
|
|
echo " dry-run Show what would be migrated"
|
|
echo " force Force migration state"
|
|
echo " repair Repair migration table"
|
|
echo " baseline Set migration baseline"
|
|
echo " history Show migration history"
|
|
echo " schema-dump Dump current schema"
|
|
echo " data-migrate Migrate data between schemas"
|
|
echo " template Manage migration templates"
|
|
echo
|
|
echo -e "${CYAN}utils${NC} Database utilities and maintenance"
|
|
echo " size Show database size information"
|
|
echo " tables List all tables with row counts"
|
|
echo " indexes Show index information"
|
|
echo " constraints Show table constraints"
|
|
echo " users Show database users (PostgreSQL only)"
|
|
echo " permissions Show user permissions"
|
|
echo " sessions Show active sessions"
|
|
echo " locks Show current locks"
|
|
echo " queries Show running queries"
|
|
echo " kill-query Kill a specific query"
|
|
echo " optimize Optimize database (VACUUM, ANALYZE)"
|
|
echo " reindex Rebuild indexes"
|
|
echo " check-integrity Check database integrity"
|
|
echo " repair Repair database issues"
|
|
echo " cleanup Clean up temporary data"
|
|
echo " logs Show database logs"
|
|
echo " config Show database configuration"
|
|
echo " extensions List database extensions (PostgreSQL)"
|
|
echo " sequences Show sequence information"
|
|
echo " triggers Show table triggers"
|
|
echo " functions Show user-defined functions"
|
|
echo " views Show database views"
|
|
echo " schema-info Show comprehensive schema information"
|
|
echo " duplicate-data Find duplicate records"
|
|
echo " orphaned-data Find orphaned records"
|
|
echo " table-stats Show detailed table statistics"
|
|
echo " connection-test Test database connection"
|
|
echo " benchmark Run database benchmarks"
|
|
echo " export-schema Export database schema"
|
|
echo " import-schema Import database schema"
|
|
echo " copy-table Copy table data"
|
|
echo " truncate-table Truncate table data"
|
|
echo " reset-sequence Reset sequence values"
|
|
echo
|
|
echo -e "${BOLD}Common Options:${NC}"
|
|
echo " --env ENV Environment (dev/prod) [default: dev]"
|
|
echo " --force Skip confirmations"
|
|
echo " --quiet Suppress verbose output"
|
|
echo " --debug Enable debug output"
|
|
echo " --dry-run Show what would be done without executing"
|
|
echo " --help Show category-specific help"
|
|
echo
|
|
echo -e "${BOLD}Quick Commands:${NC}"
|
|
echo " $0 status Quick database status"
|
|
echo " $0 health Complete health check"
|
|
echo " $0 backup Create backup"
|
|
echo " $0 migrate Run migrations"
|
|
echo " $0 optimize Optimize database"
|
|
echo
|
|
echo -e "${BOLD}Examples:${NC}"
|
|
echo " $0 setup create # Create database"
|
|
echo " $0 setup migrate # Run migrations"
|
|
echo " $0 backup create # Create backup"
|
|
echo " $0 backup restore --file backup.sql # Restore from backup"
|
|
echo " $0 monitor health # Health check"
|
|
echo " $0 monitor connections # Show connections"
|
|
echo " $0 migrate create --name add_users # Create migration"
|
|
echo " $0 migrate run # Run pending migrations"
|
|
echo " $0 utils size # Show database size"
|
|
echo " $0 utils optimize # Optimize database"
|
|
echo
|
|
echo -e "${BOLD}For detailed help on a specific category:${NC}"
|
|
echo " $0 setup --help"
|
|
echo " $0 backup --help"
|
|
echo " $0 monitor --help"
|
|
echo " $0 migrate --help"
|
|
echo " $0 utils --help"
|
|
}
|
|
|
|
# Check if required scripts exist
|
|
check_scripts() {
|
|
local missing_scripts=()
|
|
|
|
if [ ! -f "$SCRIPT_DIR/db-setup.sh" ]; then
|
|
missing_scripts+=("db-setup.sh")
|
|
fi
|
|
|
|
if [ ! -f "$SCRIPT_DIR/db-backup.sh" ]; then
|
|
missing_scripts+=("db-backup.sh")
|
|
fi
|
|
|
|
if [ ! -f "$SCRIPT_DIR/db-monitor.sh" ]; then
|
|
missing_scripts+=("db-monitor.sh")
|
|
fi
|
|
|
|
if [ ! -f "$SCRIPT_DIR/db-migrate.sh" ]; then
|
|
missing_scripts+=("db-migrate.sh")
|
|
fi
|
|
|
|
if [ ! -f "$SCRIPT_DIR/db-utils.sh" ]; then
|
|
missing_scripts+=("db-utils.sh")
|
|
fi
|
|
|
|
if [ ${#missing_scripts[@]} -gt 0 ]; then
|
|
log_error "Missing required scripts: ${missing_scripts[*]}"
|
|
echo "Please ensure all database management scripts are present in the scripts directory."
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Make scripts executable
|
|
make_scripts_executable() {
|
|
chmod +x "$SCRIPT_DIR"/db-*.sh 2>/dev/null || true
|
|
}
|
|
|
|
# Show quick status
|
|
show_quick_status() {
|
|
print_header "Quick Database Status"
|
|
|
|
# Check if .env exists
|
|
if [ ! -f ".env" ]; then
|
|
log_error ".env file not found"
|
|
echo "Run: $0 setup create"
|
|
return 1
|
|
fi
|
|
|
|
# Load environment variables
|
|
export $(grep -v '^#' .env | xargs) 2>/dev/null || true
|
|
|
|
# Show basic info
|
|
log "Environment: ${ENVIRONMENT:-dev}"
|
|
log "Database URL: ${DATABASE_URL:-not set}"
|
|
|
|
# Test connection
|
|
if command -v "$SCRIPT_DIR/db-utils.sh" >/dev/null 2>&1; then
|
|
"$SCRIPT_DIR/db-utils.sh" connection-test --quiet 2>/dev/null || log_warn "Database connection failed"
|
|
fi
|
|
|
|
# Show migration status
|
|
if command -v "$SCRIPT_DIR/db-migrate.sh" >/dev/null 2>&1; then
|
|
"$SCRIPT_DIR/db-migrate.sh" status --quiet 2>/dev/null || log_warn "Could not check migration status"
|
|
fi
|
|
}
|
|
|
|
# Show comprehensive health check
|
|
show_health_check() {
|
|
print_header "Comprehensive Database Health Check"
|
|
|
|
if [ -f "$SCRIPT_DIR/db-monitor.sh" ]; then
|
|
"$SCRIPT_DIR/db-monitor.sh" health "$@"
|
|
else
|
|
log_error "db-monitor.sh not found"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Create quick backup
|
|
create_quick_backup() {
|
|
print_header "Quick Database Backup"
|
|
|
|
if [ -f "$SCRIPT_DIR/db-backup.sh" ]; then
|
|
"$SCRIPT_DIR/db-backup.sh" backup --compress "$@"
|
|
else
|
|
log_error "db-backup.sh not found"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Run migrations
|
|
run_migrations() {
|
|
print_header "Running Database Migrations"
|
|
|
|
if [ -f "$SCRIPT_DIR/db-migrate.sh" ]; then
|
|
"$SCRIPT_DIR/db-migrate.sh" run "$@"
|
|
else
|
|
log_error "db-migrate.sh not found"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Optimize database
|
|
optimize_database() {
|
|
print_header "Database Optimization"
|
|
|
|
if [ -f "$SCRIPT_DIR/db-utils.sh" ]; then
|
|
"$SCRIPT_DIR/db-utils.sh" optimize "$@"
|
|
else
|
|
log_error "db-utils.sh not found"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Parse command line arguments
|
|
CATEGORY=""
|
|
COMMAND=""
|
|
REMAINING_ARGS=()
|
|
|
|
# Handle special single commands
|
|
if [[ $# -eq 1 ]]; then
|
|
case $1 in
|
|
"status")
|
|
show_quick_status
|
|
exit 0
|
|
;;
|
|
"health")
|
|
show_health_check
|
|
exit 0
|
|
;;
|
|
"backup")
|
|
create_quick_backup
|
|
exit 0
|
|
;;
|
|
"migrate")
|
|
run_migrations
|
|
exit 0
|
|
;;
|
|
"optimize")
|
|
optimize_database
|
|
exit 0
|
|
;;
|
|
"-h"|"--help")
|
|
print_usage
|
|
exit 0
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
# Parse arguments
|
|
while [[ $# -gt 0 ]]; do
|
|
case $1 in
|
|
-h|--help)
|
|
if [ -n "$CATEGORY" ]; then
|
|
REMAINING_ARGS+=("$1")
|
|
else
|
|
print_usage
|
|
exit 0
|
|
fi
|
|
shift
|
|
;;
|
|
*)
|
|
if [ -z "$CATEGORY" ]; then
|
|
CATEGORY="$1"
|
|
elif [ -z "$COMMAND" ]; then
|
|
COMMAND="$1"
|
|
else
|
|
REMAINING_ARGS+=("$1")
|
|
fi
|
|
shift
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# Check if we're in the right directory
|
|
if [ ! -f "Cargo.toml" ]; then
|
|
log_error "Please run this script from the project root directory"
|
|
exit 1
|
|
fi
|
|
|
|
# Check that all required scripts exist
|
|
check_scripts
|
|
|
|
# Make scripts executable
|
|
make_scripts_executable
|
|
|
|
# Validate category and command
|
|
if [ -z "$CATEGORY" ]; then
|
|
print_usage
|
|
exit 1
|
|
fi
|
|
|
|
# Route to appropriate script
|
|
case "$CATEGORY" in
|
|
"setup")
|
|
if [ -z "$COMMAND" ]; then
|
|
log_error "Command required for setup category"
|
|
echo "Use: $0 setup --help for available commands"
|
|
exit 1
|
|
fi
|
|
exec "$SCRIPT_DIR/db-setup.sh" "$COMMAND" "${REMAINING_ARGS[@]}"
|
|
;;
|
|
"backup")
|
|
if [ -z "$COMMAND" ]; then
|
|
log_error "Command required for backup category"
|
|
echo "Use: $0 backup --help for available commands"
|
|
exit 1
|
|
fi
|
|
exec "$SCRIPT_DIR/db-backup.sh" "$COMMAND" "${REMAINING_ARGS[@]}"
|
|
;;
|
|
"monitor")
|
|
if [ -z "$COMMAND" ]; then
|
|
log_error "Command required for monitor category"
|
|
echo "Use: $0 monitor --help for available commands"
|
|
exit 1
|
|
fi
|
|
exec "$SCRIPT_DIR/db-monitor.sh" "$COMMAND" "${REMAINING_ARGS[@]}"
|
|
;;
|
|
"migrate")
|
|
if [ -z "$COMMAND" ]; then
|
|
log_error "Command required for migrate category"
|
|
echo "Use: $0 migrate --help for available commands"
|
|
exit 1
|
|
fi
|
|
exec "$SCRIPT_DIR/db-migrate.sh" "$COMMAND" "${REMAINING_ARGS[@]}"
|
|
;;
|
|
"utils")
|
|
if [ -z "$COMMAND" ]; then
|
|
log_error "Command required for utils category"
|
|
echo "Use: $0 utils --help for available commands"
|
|
exit 1
|
|
fi
|
|
exec "$SCRIPT_DIR/db-utils.sh" "$COMMAND" "${REMAINING_ARGS[@]}"
|
|
;;
|
|
*)
|
|
log_error "Unknown category: $CATEGORY"
|
|
echo
|
|
print_usage
|
|
exit 1
|
|
;;
|
|
esac
|