写备份恢复的脚本。卡住了。备份的部分是完成了。唉。只怪我的shell水平太弱了。恢复的部分怎么想都觉得不好。还是手工恢复吧。等我想好了再来完善。do,undo,redo,日志。作为我理想中设计完善的脚本,应该具备这些灵活安全完善的功能,也就是目标是万无一失,像editplus可以无限的撤销重做一样,怎么改都会回到原来的状态。
#!/bin/bash
#
# datamgr This shell script takes care of backup and restore
# mysql database.
#
#
# description: backup your database and restore ,support do, undo,\
#
#
#取所有参数
option=$1
targetTime=$2
targetDB=$3
targetTable=$4
#echo $#
[ $# -gt 3 ] || targetTable="NOTABLE"
[ $# -gt 2 ] || targetDB="mambog_corp"
[ $# -gt 1 ] || targetTime=`date +%Y-%m-%d`
[ $# -gt 0 ] || exit 1
#设置备份文件和数据库数据存放的路径。
dataBkDir=/home/bailing/databk
dataDir=/var/lib/mysql
configFile="${bkDir}/datamgr.conf";
#设置错误提示
error_db_not_exists="数据库不存在"
error_table_not_exists="表不存在"
error_time_bad_format="wrong date format ,must be(yyyy-mm-dd,like 2006-03-03)"
#设置用户提示
usage="Usage: $0 [-options][ yyyy-mm-dd ][ databasename [tablename] ]
or: $0 "
usage_try="
Try \`$0 --help' for more information."
usage_help="
[参数列表]
-b 备份
-r 恢复
-u 撤销本次恢复操作
-d 库名 备份/恢复一数据库
-t 表名 备份/恢复某一表
-t 时间 恢复哪天(格式:年-月-日,如2006-02-02)的表/数据库
-l 列出所有已备份的文件名 / 列出所有数据库的名称
-h 帮助
"
if [ $# -eq 0 ]; then
echo >&2 "$usage"
echo >&2 "$usage_try"
exit 127
fi
fail=0
case $# in
1 )
case "z${1}" in
z--help )
echo -n "$usage" || fail=127; echo -n "$usage_help" || fail=127
exit $fail;;
z--version )
echo "datamgr 0.1" || fail=127
exit $fail;;
* ) ;;
esac
;;
* ) ;;
esac
RETVAL=0
dataFileName="NULL"
bkFileName="NULL"
#设置备份文件名
genBkFileName(){
if [ $targetTable != "NOTABLE" ]; then
if [ $option = "-r" ]; then
uTime=`date +%H-%M-%S`
bkFileName="${dataBkDir}/${targetDB}.${targetTable}.${targetTime}.${uTime}"
else
bkFileName="${dataBkDir}/${targetDB}.${targetTable}.${targetTime}"
fi
else
if [ $option = "-r" ]; then
uTime=`date +%H-%M-%S`
bkFileName="${dataBkDir}/${targetDB}.${targetTime}.${uTime}"
else
bkFileName="${dataBkDir}/${targetDB}.${targetTime}"
fi
fi
oldBkFileName=$bkFileName
tmpstr="0 1 2 3 4 5 6 7 8 9"
for i in $tmpstr
do
if [ -f $bkFileName.zip ]; then
bkFileName="$oldBkFileName-$i"
fi
done
bkFileName=$bkFileName.zip;
}
#设置数据文件名
genDataFileName(){
if [ $targetTable != "NOTABLE" ]; then
dataFileName="${targetDB}/${targetTable}.*"
else
dataFileName="${targetDB}/*.*"
fi
}
#备份
backup() {
echo "Starting backup






.. "
targetTime=`date +%Y-%m-%d`
#测试数据库是否存在
[ -d "${dataDir}/${targetDB}" ]
RETVAL=$?
if [ $RETVAL -gt 0 ]; then
echo $error_db_not_exists;
exit $RETVAL;
fi
#设置文件名
genDataFileName
genBkFileName
echo $1
echo "data Files :${dataFileName}";
echo "backup File Name :${bkFileName}";
cd $dataDir
RETVAL=$?
if [ $RETVAL -gt 0 ]; then
exit $RETVAL
fi
zip -r -b $dataBkDir -9 $bkFileName $dataFileName
RETVAL=$?
#return $RETVAL
}
#恢复数据
restore() {
# Stop daemons.
echo -n $"restore? !!!! (y/n): "
read confirm
case "$confirm" in
y|Y)
echo " restore starting "
backup
echo $dataFileName
echo $bkFileName
bkFileName="${dataBkDir}/${targetDB}.${targetTime}.zip"
echo $bkFileName
;;
n|Y)
echo "restore cancel, no data was restored, no modified happened"
exit 1;
;;
*)
echo "bad param, no data was restored, no modified happened"
exit 1
;;
esac
if [[ $targetTime == [0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] ]] ;then
echo $targetTime;
else
echo "${error_time_bad_format}- ${targetTime}";
exit 1
fi
RETVAL=$?
return $RETVAL
}
#列出所有已备份的文件
list(){
echo "all backuped files"
ls $dataBkDir
}
undo(){
echo "undo the restore operation";
}
redo(){
echo "redo the restore operation";
}
# See how we were called.
case "$1" in
-b)
backup
;;
-r)
restore
;;
-u)
undo
;;
-l)
list
RETVAL=$?
;;
*)
echo $usage_help
exit 1
esac
exit $RETVAL
#
# datamgr This shell script takes care of backup and restore
# mysql database.
#
#
# description: backup your database and restore ,support do, undo,\
#
#
#取所有参数
option=$1
targetTime=$2
targetDB=$3
targetTable=$4
#echo $#
[ $# -gt 3 ] || targetTable="NOTABLE"
[ $# -gt 2 ] || targetDB="mambog_corp"
[ $# -gt 1 ] || targetTime=`date +%Y-%m-%d`
[ $# -gt 0 ] || exit 1
#设置备份文件和数据库数据存放的路径。
dataBkDir=/home/bailing/databk
dataDir=/var/lib/mysql
configFile="${bkDir}/datamgr.conf";
#设置错误提示
error_db_not_exists="数据库不存在"
error_table_not_exists="表不存在"
error_time_bad_format="wrong date format ,must be(yyyy-mm-dd,like 2006-03-03)"
#设置用户提示
usage="Usage: $0 [-options][ yyyy-mm-dd ][ databasename [tablename] ]
or: $0 "
usage_try="
Try \`$0 --help' for more information."
usage_help="
[参数列表]
-b 备份
-r 恢复
-u 撤销本次恢复操作
-d 库名 备份/恢复一数据库
-t 表名 备份/恢复某一表
-t 时间 恢复哪天(格式:年-月-日,如2006-02-02)的表/数据库
-l 列出所有已备份的文件名 / 列出所有数据库的名称
-h 帮助
"
if [ $# -eq 0 ]; then
echo >&2 "$usage"
echo >&2 "$usage_try"
exit 127
fi
fail=0
case $# in
1 )
case "z${1}" in
z--help )
echo -n "$usage" || fail=127; echo -n "$usage_help" || fail=127
exit $fail;;
z--version )
echo "datamgr 0.1" || fail=127
exit $fail;;
* ) ;;
esac
;;
* ) ;;
esac
RETVAL=0
dataFileName="NULL"
bkFileName="NULL"
#设置备份文件名
genBkFileName(){
if [ $targetTable != "NOTABLE" ]; then
if [ $option = "-r" ]; then
uTime=`date +%H-%M-%S`
bkFileName="${dataBkDir}/${targetDB}.${targetTable}.${targetTime}.${uTime}"
else
bkFileName="${dataBkDir}/${targetDB}.${targetTable}.${targetTime}"
fi
else
if [ $option = "-r" ]; then
uTime=`date +%H-%M-%S`
bkFileName="${dataBkDir}/${targetDB}.${targetTime}.${uTime}"
else
bkFileName="${dataBkDir}/${targetDB}.${targetTime}"
fi
fi
oldBkFileName=$bkFileName
tmpstr="0 1 2 3 4 5 6 7 8 9"
for i in $tmpstr
do
if [ -f $bkFileName.zip ]; then
bkFileName="$oldBkFileName-$i"
fi
done
bkFileName=$bkFileName.zip;
}
#设置数据文件名
genDataFileName(){
if [ $targetTable != "NOTABLE" ]; then
dataFileName="${targetDB}/${targetTable}.*"
else
dataFileName="${targetDB}/*.*"
fi
}
#备份
backup() {
echo "Starting backup







.. "targetTime=`date +%Y-%m-%d`
#测试数据库是否存在
[ -d "${dataDir}/${targetDB}" ]
RETVAL=$?
if [ $RETVAL -gt 0 ]; then
echo $error_db_not_exists;
exit $RETVAL;
fi
#设置文件名
genDataFileName
genBkFileName
echo $1
echo "data Files :${dataFileName}";
echo "backup File Name :${bkFileName}";
cd $dataDir
RETVAL=$?
if [ $RETVAL -gt 0 ]; then
exit $RETVAL
fi
zip -r -b $dataBkDir -9 $bkFileName $dataFileName
RETVAL=$?
#return $RETVAL
}
#恢复数据
restore() {
# Stop daemons.
echo -n $"restore? !!!! (y/n): "
read confirm
case "$confirm" in
y|Y)
echo " restore starting "
backup
echo $dataFileName
echo $bkFileName
bkFileName="${dataBkDir}/${targetDB}.${targetTime}.zip"
echo $bkFileName
;;
n|Y)
echo "restore cancel, no data was restored, no modified happened"
exit 1;
;;
*)
echo "bad param, no data was restored, no modified happened"
exit 1
;;
esac
if [[ $targetTime == [0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] ]] ;then
echo $targetTime;
else
echo "${error_time_bad_format}- ${targetTime}";
exit 1
fi
RETVAL=$?
return $RETVAL
}
#列出所有已备份的文件
list(){
echo "all backuped files"
ls $dataBkDir
}
undo(){
echo "undo the restore operation";
}
redo(){
echo "redo the restore operation";
}
# See how we were called.
case "$1" in
-b)
backup
;;
-r)
restore
;;
-u)
undo
;;
-l)
list
RETVAL=$?
;;
*)
echo $usage_help
exit 1
esac
exit $RETVAL
浙公网安备 33010602011771号