#!/bin/bash

# ==========================================================
# MySQL 개별 데이터베이스 백업 스크립트
# 작성일: 2026-02-14
# 설명: 웹/터미널 환경 분기 적용
# ==========================================================

# [설정] MySQL 접속 정보
SRC_USER="root"
SRC_PW="@smartserver"

# [기본값 설정]
DEF_BACKUP_IP="192.168.56.201"
DEF_BACKUP_DIR="/mnt/storage1/mysql_backup"
DEF_BACKUP_DATE=$(date +%Y%m%d)
DEF_BACKUP_DATA=""

# 웹(파라미터) / 터미널(대화형) 분기
if [ "$#" -gt 0 ]; then
    # 파라미터가 있을 경우 (웹 모드)
    BACKUP_IP=${1:-$DEF_BACKUP_IP}
    BACKUP_DIR=${2:-$DEF_BACKUP_DIR}
    BACKUP_DATE=${3:-$DEF_BACKUP_DATE}
    BACKUP_DATA=${4:-$DEF_BACKUP_DATA}
    BACKUP_DATA=$(echo "$BACKUP_DATA" | tr '[:lower:]' '[:upper:]')
else
    # 파라미터가 없을 경우 (대화형 모드)
    echo "----------------------------------------------------"
    echo "  MySQL 데이터베이스 백업 설정을 시작합니다."
    echo "  (입력 없이 Enter를 누르면 기본값이 사용됩니다.)"
    echo "----------------------------------------------------"

    read -p "1. 백업 서버 IP (기본: $DEF_BACKUP_IP): " BACKUP_IP
    BACKUP_IP=${BACKUP_IP:-$DEF_BACKUP_IP}

    read -p "2. 백업 저장 경로 (기본: $DEF_BACKUP_DIR): " BACKUP_DIR
    BACKUP_DIR=${BACKUP_DIR:-$DEF_BACKUP_DIR}

    read -p "3. 백업 날짜 (기본: $DEF_BACKUP_DATE): " BACKUP_DATE
    BACKUP_DATE=${BACKUP_DATE:-$DEF_BACKUP_DATE}

    read -p "4. 백업할 DB 이름 (기본: 데이터베이스 전체): " BACKUP_DATA
    BACKUP_DATA=${BACKUP_DATA:-$DEF_BACKUP_DATA}
    BACKUP_DATA=$(echo "$BACKUP_DATA" | tr '[:lower:]' '[:upper:]')

    echo ""
    echo "----------------------------------------------------"
    echo " [입력 정보 확인]"
    echo " > 서버 IP: $BACKUP_IP"
    echo " > 저장 경로: $BACKUP_DIR/$BACKUP_DATE"
    echo " > 대상 DB: ${BACKUP_DATA:-"전체 개별 백업"}"
    echo "----------------------------------------------------"
    read -p " 위 정보를 확인하셨습니까? (Enter를 누르면 시작합니다)" CONFIRM
fi

# 시작 시간 기록 및 경로 지정
START_DATETIME=$(date "+%Y-%m-%d %H:%M:%S")
TARGET_PATH="$BACKUP_DIR/$BACKUP_DATE"

mkdir -p "$TARGET_PATH"
export MYSQL_PWD="$SRC_PW"

echo ""
echo "백업 시작: $START_DATETIME"
echo "----------------------------------------------------"

if [ -z "$BACKUP_DATA" ]; then
    DB_LIST=$(mysql -h "$BACKUP_IP" -u "$SRC_USER" -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema|mysql|sys)")
else
    DB_LIST=$(echo "$BACKUP_DATA" | tr ',' ' ')
fi

for DB in $DB_LIST
do
    FILE_NAME="$TARGET_PATH/${DB}.sql"
    
    mysqldump -h "$BACKUP_IP" -u "$SRC_USER" --opt --single-transaction --databases "$DB" > "$FILE_NAME" 2>/dev/null

    if [ $? -eq 0 ]; then
        gzip -f "$FILE_NAME"
        echo "${DB}.gz 백업완료"
    else
        echo ">>> [실패] $DB 백업 중 에러 발생"
    fi
done

unset MYSQL_PWD
END_DATETIME=$(date "+%Y-%m-%d %H:%M:%S")

echo "----------------------------------------------------"
echo "백업 완료: $END_DATETIME"
echo "----------------------------------------------------"