#!/usr/bin/env bash

# program : mysql_docker_sync.sh
#  author : wangqijia@youzan.com
#    date : 2020-05-21
# version : 0.0.0.1


# exit shell with err_code
# $1 : err_code
# $2 : err_msg


exit_on_err()
{
    [[ ! -z "${2}" ]] && echo "${2}" 1>&2
    exit ${1}
}

# display usage
function usage() {
echo "
usage: ${0} [n] [f]

    -h : help
         Prints the ${0} help
    -n : database name
         specify database name, eg: -n app1
    -f : infile name
         specify input file name, eg: -f app1.sql
"
}

function version_ge() {
    test "$(echo "$@" | tr " " "\n" | sort -rV | head -n 1)" == "$1"
}

function docker_install(){
    MIN_DOCKER_VERSION="17.03"

    echo "检查Docker......"
    DOCKER_VERSION_STR=`docker -v`

    if [ $? -eq 0 ]; then
        echo "检查到Docker本地已安装！"
        DOCKER_VERSION=`echo $DOCKER_VERSION_STR | grep -Eo '([0-9]+\.){1,2}[0-9]+'`
        if version_ge $DOCKER_VERSION $MIN_DOCKER_VERSION; then
            echo "当前Docker版本$DOCKER_VERSION, 检查Docker版本OK！"
        else
            exit_on_err 1 "当前Docker版本$DOCKER_VERSION, 请安装Docker CE 17.03及以上版本！"
        fi
    else
        exit_on_err 1 "请先安装Docker，Docker CE 17.03及以上版本！"
    fi
}

 

# the main function
function main() {
    DB_NAME=""
    INFILE_NAME=""

    while getopts "hn:f:" ARG
    do
        case ${ARG} in
            h)
                usage
                exit
            ;;
            n)
                DB_NAME=$OPTARG
                echo "您指定要创建的应用数据库是：${DB_NAME}"
            ;;
            f)
                INFILE_NAME=$OPTARG
                echo "导入的数据文件为：${INFILE_NAME}"
                
        esac
    done

    docker_install

    #检查mysql容器是否已存在
    docker ps | grep "yz-mysql"
    if [ $? -ne 0 ]; then
        exit_on_err 1 "本地mysql容器实例还未启动，请先启动mysql容器实例。"
    fi


	#数据库导入数据
    echo "准备同步数据库数据..."
	docker exec -i `docker inspect -f '{{.Id}}' yz-mysql` mysql -h localhost -uroot -p123456 ${DB_NAME} < ${INFILE_NAME}
	if [ $? -eq 0 ]; then
	    echo "应用数据库：${DB_NAME}同步数据成功！！"
	else
	    exit_on_err 1 "应用数据库：${DB_NAME}同步数据失败！！"
	fi
}

main "${@}"
