#!/bin/bash
#用於快速備份/還原 mariadb 資料庫的指令
#由邱敬幃 Pardn Chiu 撰寫

RUN="backup"
MIN="1440"

OPTIONS=$(getopt -o r:p:d:f:n:c:h -l run:,password:,database:,folder:,clean:,name:,help -- "$@")

if [ $? != 0 ]; then
    echo "-r/--run backup -p/--password [PASSWORD] -d/--database [DATABASE] -f/--folder [FOLDER] -c/--clean [MIN]" >&2
    echo "-r/--run restore -p/--password [PASSWORD] -d/--database [DATABASE] -f/--folder [FOLDER] -n/--name [NAME]" >&2
    exit 1
fi

eval set -- "$OPTIONS"

while true; do
    case "$1" in
        -r | --run )
            RUN="$2"; shift 2 ;;
        -p | --password )
            PASSWORD="$2"; shift 2 ;;
        -d | --database )
            DATABASE="$2"; shift 2 ;;
        -f | --folder )
            FOLDER="$2"; shift 2 ;;
        -n | --name )
            NAME="$2"; shift 2 ;;
        -c | --clean )
            MIN="$2"; shift 2 ;;
        -h | --help )
            HELP="true"; shift ;;
        -- )
            shift; break ;;
        * )
            break ;;
    esac
done

if [ -z "$PASSWORD" ]; then
    echo "-p/--password [PASSWORD]" >&2
    exit 1
elif [ -z "$DATABASE" ]; then
    echo "-d/--database [DATABASE]" >&2
    exit 1
elif [ -z "$FOLDER" ]; then
    echo "-f/--folder [FOLDER]" >&2
    exit 1
elif [ "$RUN" = "restore" ] && [ -z "$NAME" ]; then
    echo "-n/--name [NAME]" >&2
    exit 1
fi


if [ "$HELP" = "true" ]; then
    echo "-r/--run backup -p/--password [PASSWORD] -d/--database [DATABASE] -f/--folder [FOLDER] -c/--clean [MIN]" >&2
    echo "-r/--run restore -p/--password [PASSWORD] -d/--database [DATABASE] -f/--folder [FOLDER] -n/--name [NAME]" >&2
    exit 0
fi

case "$RUN" in
    "backup" )
        DATE=$(date '+%Y%m%d')
        HOUR=$(date '+%H')
        mkdir -p "$FOLDER"
        mkdir -p "$FOLDER/$DATE"
        mysqldump -u root -p"$PASSWORD" "$DATABASE" > "$FOLDER/$DATE/$HOUR.sql"
        find "$FOLDER" -iname "*.sql" -mmin +"$MIN" -exec rm -rf {} \;
        find "$FOLDER" -depth -empty -type d -exec rm -rf {} \;
        ;;
    "restore" )
        mysql -u root -p"$PASSWORD" "$DATABASE" < "$FOLDER/$NAME"
        ;;
    * )
        echo "無效的運行模式" >&2
        exit 1
        ;;
esac
