#!/bin/sh
# 功能：
#	备份数据库、恢复数据库、导出数据库备份列表、删除数据库备份文件
#
# 历史：
#	2009-09-09	Lunas.JZ(http://imjz.org) 	First release
#
# 调用方式 backup.sh [option1 option2]
# 	备份文件 backup.sh
#		backup前缀为用户主动被份，recover前缀为恢复某一备份文件前程序自动备份。
# 	恢复备份文件 backup.sh "recover" "filename"
# 	导出备份文件列表 backup.sh "show" "search"
#		search可为 "recover"、"backup"、或grep 正则表达式
# 	删除文件 backup.sh "delete" "filename1 filename2"

#数据库文件的存放目录
SourcePath="/usr/local/mysql"
#数据库
SourceDir="data"
#备份文件存放目录
BackupPath="/usr/local/mysql/backup_data"
#备份日志地址
LogFile="/usr/local/mysql/backup_data/dbbackup.log"
#导出备份文件列表地址
#ShowFile="/usr/local/jboss/server/default/deploy/ROOT.war/WEB-INF/backuplist.properties"
ShowFile="aa.txt"

# ----------------备份-------------------------
backup(){
	if [ "$1" ]
	then
		Prefix="recover"
	else
		Prefix="backup"
	fi

	if [ -d "$BackupPath" ]
	then
		echo "[$BackupPath]The Backup Directory is exist!" >> $LogFile
	else
		mkdir "$BackupPath"
		echo "[$BackupPath]The Backup Directory Creating successful!" >> $LogFile
	fi	

	NewFile="$BackupPath"/"$Prefix"\_$(date +%y%m%d%H%M).tar.gz
	echo "--------------------------" >> $LogFile
	echo $(date +"%y-%m-%d %H:%M:%S") >> $LogFile
	echo "--------------------------" >> $LogFile
	echo "Backup Data." >> $LogFile
	
	if [ -f $NewFile ]
	then
  		echo "[$NewFile]The Backup File is exists! Deleting...." >> $LogFile
		rm -f $NewFile >> $LogFile 2>&1
	fi

    	tar czvf $NewFile -C $SourcePath $SourceDir >> $LogFile 2>&1

    	echo "[$NewFile]Backup Success!" >> $LogFile
	return 0
}

#--------------------恢复------------------------------
recover(){
	BackupFileName="$BackupPath"/"$1"
	SourceFileName="$SourcePath"/"$SourceDir"

	echo "--------------------------" >> $LogFile
	echo $(date +"%y-%m-%d %H:%M:%S") >> $LogFile
	echo "--------------------------" >> $LogFile
	echo "Recover old data." >> $LogFile

	if [ -f "$BackupFileName" ]
	then
		echo "Backup existing data." >> $LogFile
		backup "recover"

		echo "[$SourceFileName]Deleting old Data..." >> $LogFile
		rm -rf $SourceFileName >> $LogFile 2>&1

		echo "[$BackupFileName]Recovering data..." >> $LogFile
		tar xzvf $BackupFileName -C $SourcePath >> $LogFile 2>&1
		echo "[$BackupFileName]Recovering successful." >>$LogFile
	else
		echo "[$BackupFileName]Recover files not found." >>$LogFile
		echo "[ERROR]Recovering Failure." >>$LogFile
		return 1	
	fi
	return 0
}

#--------------------将备份文件输出到指定文件以便程序获取-----------------------
showfile(){
	echo "--------------------------" >> $LogFile
	echo $(date +"%y-%m-%d %H:%M:%S") >> $LogFile
	echo "--------------------------" >> $LogFile
	echo "View the backup files list." >> $LogFile
	
	if [ "$1" ]
	then
		ls -1B $BackupPath | grep '.tar.gz\>' | grep $1 > $ShowFile
	else
		ls -1B $BackupPath | grep '.tar.gz\>' > $ShowFile
	fi
	return 0
}

#----------------------删除备份文件------------------------------------------
deletefile(){
	echo "--------------------------" >> $LogFile
	echo $(date +"%y-%m-%d %H:%M:%S") >> $LogFile
	echo "--------------------------" >> $LogFile
	echo "Delete old backup files."	>> $LogFile

	if [ "$1" ]
	then
		echo "[$1]Deleting old backup files..." >> $LogFile
		cd "$BackupPath"
		rm -f $1 >> $LogFile 2>&1
	else
		echo "[ERROR]Missing Parameter!" >> $LogFile
		return 1
	fi 
	return 0
}

#----------------------执行开始，根据参数选择调用方法----------------------------
case "$1" in
   "show")
	showfile "$2"
	exit "$?"
	;;
   "recover")
	service mysqld stop >/dev/null 2>&1
	recover "$2"
	temp=$?
	service mysqld start >/dev/null 2>&1
	exit $temp
   	;;
   "delete")
	deletefile "$2"
	exit "$?"
	;;
   *)
    	service mysqld stop >/dev/null 2>&1
	backup
	temp=$?
    	service mysqld start >/dev/null 2>&1
	exit $temp
	;;
esac

