#!/bin/bash

# Dump all MySQL databases individually
# Usage: ./dump_all_dbs.sh [host] [user] [password] [output_dir]

HOST="${1:-localhost}"
USER="${2:-root}"
PASSWORD="${3}"
OUTPUT_DIR="${4:-./mysql_dumps}"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")

mkdir -p "$OUTPUT_DIR"

if [ -z "$PASSWORD" ]; then
    MYSQL_CMD="mysql -h $HOST -u $USER"
    DUMP_CMD="mysqldump -h $HOST -u $USER"
else
    MYSQL_CMD="mysql -h $HOST -u $USER -p$PASSWORD"
    DUMP_CMD="mysqldump -h $HOST -u $USER -p$PASSWORD"
fi

# Get all databases excluding system ones
DATABASES=$($MYSQL_CMD -e "SHOW DATABASES;" 2>/dev/null | grep -Ev "^(Database|information_schema|mysql|performance_schema|sys)$")

if [ -z "$DATABASES" ]; then
    echo "No databases found or connection failed."
    exit 1
fi

echo "Starting dump at $TIMESTAMP"
echo "Output dir: $OUTPUT_DIR"
echo "----------------------------"

for DB in $DATABASES; do
    FILE="$OUTPUT_DIR/${DB}_${TIMESTAMP}.sql"
    echo -n "Dumping: $DB ... "
    $DUMP_CMD --single-transaction --routines --triggers "$DB" > "$FILE" 2>/dev/null
    if [ $? -eq 0 ]; then
        SIZE=$(du -sh "$FILE" | cut -f1)
        echo "OK ($SIZE)"
    else
        echo "FAILED"
        rm -f "$FILE"
    fi
done

echo "----------------------------"
echo "Done. Files saved to: $OUTPUT_DIR"