#!/bin/bash

conf_dir=$(dirname $(pwd))
conf_file=$conf_dir/conf/backup.conf
function get_config(){
  param=$1
  value=$(sed -E '/^#.*|^ *$/d' $conf_file | awk -F "${param}=" "/${param}=/{print \$2}" | tail -n1)
  echo $value
}
#运行日志存放目录
log_url=$(get_config logUrl)

if [ -z "$log_url" ];then
	echo "ERROR: 请检查backup.conf配置文件中【logUrl】不能为空！"
	exit
fi

log_file=$log_url/$(date +"%Y-%m-%d")".log"

function log_print(){
    time=$(date +"%Y-%m-%d %H:%M:%S")
    write_str="$time $* "
	echo $write_str 
    echo "mysql恢复>>" $write_str >> $log_file
}
log_print "==============================="
log_print "INFO: 欢迎使用 MySQL 还原工具！"

if [[ ! -d "$log_url" ]]; then
	`mkdir -p $log_url`
	log_print "INFO: 创建 $log_url 目录成功！"
fi
source /home/seekcy/.bash_profile

# 备份文件存放地址
backup_data_dir=$(get_config backupDataDir)

if [ -z $backup_data_dir ];then
	log_print "ERROR: 请检查backup.conf配置文件中【backup_data_dir】不能为空！"
	exit
fi

# 判断MYSQL是否启动,mysql没有启动则备份退出
mysql_ps=`ps -ef |grep /home/seekcy/database/mysql  | grep -v grep |wc -l`
if [ $mysql_ps -lt 1 ]; then
    log_print "ERROR: MySQL 没有在运行，停止恢复！"
    exit
fi

mysql_host="localhost"

#验证输入
validate_input_db_num(){
	read -r -p '你需要还原 backup.conf 备份文件中的第几个数据库，请输入数字 [1/2/3/4/5/6]:' input_db_num
    case $input_db_num in
		[1]|[2]|[3]|[4]|[5][6])
        log_print "你选择的第 $input_db_num 个数据库，配置信息如下："
		#要备份的数据库名称
		mysql_restore_db=$(get_config mysqlDataBaseName$input_db_num)
		mysql_port=$(get_config mysqlPort$input_db_num)
		#MySQL备份用户
		mysql_user=$(get_config mysqlUser$input_db_num)
		#MySQL备份用户的密码
		mysql_password=$(get_config mysqlPassword$input_db_num)

		log_print "数据库名称: $mysql_restore_db"
		log_print "端口: $mysql_port"
		log_print "用户名: $mysql_user"
		log_print "密码: $mysql_password"
           ;;
    *)
        log_print "你输入的不合法..."
        validate_input_db_num
        ;;
	esac
 }

validate_input_db_num

# 连接到mysql数据库，无法连接则备份退出
/home/seekcy/database/mysql/bin/mysql -S /home/seekcy/database/mysql/mysql.sock -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password <<end
use mysql;
select host,user from user where user='root' and host='localhost';
exit
end

flag=`echo $?`
if [ $flag != "0" ]; then
    log_print "ERROR: 不能命令行进入mysql的数据库，恢复失败"
    exit
fi

mysql_restore_dir=$backup_data_dir/mysql/$mysql_restore_db
#判断文件夹是否存在
if [[ ! -d "$mysql_restore_dir" ]]; then
	log_print "ERROR: 数据库备份文件目录不存在请检查 $mysql_restore_dir 目录是否存在！"
	exit
fi
validate_input_notarize(){
   	restore_file=`find $mysql_restore_dir -name '*.gz' | xargs ls -lt |awk '{print $9}'| head -n 1`
	read -r -p '将要使用备份文件 '$restore_file' 进行数据库 '$mysql_restore_db' 恢复操作 [yes/no]:' input
	
	case $input in
		[yY][eE][sS])
        log_print "输入了yes"
           ;;
    [nN][oO])
        log_print "输入了no"
        exit
           ;;
    *)
        log_print "你输入的不合法..."
        validate_input_notarize
        ;;
	esac
}

validate_input_notarize

mysql_host="localhost"
mysql_charset="utf8"
file_date=""

if [ -z $mysql_restore_db ];then
	log_print "ERROR: 请检查backup.conf配置文件中第 $input_db_num 个mysql数据库名称不能为空！"
	exit
fi

if [ -z $mysql_user ] || [ -z $mysql_password ] || [ -z $mysql_port ];then
	log_print "ERROR: 请检查backup.conf配置文件中第 $input_db_num 个mysql数据库 $mysql_restore_db 的[用户名/密码/端口号]不能为空！"
	exit
fi


#解压压缩文件
gunzip_data(){
   file=`find $mysql_restore_dir -name '*.gz' | xargs ls -lt |awk '{print $9}'| head -n 1`
   if [[ ! -f $file ]];then
	   log_print "ERROR: 依赖恢复的备份文件不存在，恢复失败！"
	   exit
	else
		file_end=`echo ${file##*js_open_location_server-}`
		file_date=`echo ${file_end%.sql*}`
		`gzip -dc $file > $file_date.sql`
		log_print "INFO: 解压缩文件 $file 到 $file_date.sql 成功！"
	fi	
}


#判断文件是否存在
if [[ ! -f "$mysql_restore_dir/$mysql_restore_db.sql" ]]; then
	gunzip_data
else
	`find $mysql_restore_dir -name '*.sql' | xargs ls -ltr |awk '{print $9}'|xargs rm -rf`
	log_print "INFO: 删除备份 .sql 文件成功！"
	gunzip_data
fi

log_print "INFO: 数据库 $mysql_restore_db 恢复开始，请耐心等待..."
`mysql -u$mysql_user -p$mysql_password $mysql_restore_db < $file_date.sql`
flag=`echo $?`
if [ $flag == "0" ];then
	log_print ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
	log_print "INFO: $mysql_restore_db 数据库根据 $file_date.sql 恢复成功！"
	log_print ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
else
	log_print ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
	log_print "ERROR: 数据库 $mysql_restore_db 恢复失败！"
	log_print ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
fi  

log_print "INFO: 感谢使用MySQL恢复工具，再见！"
log_print "==============================="
