suse-linux定时备份数据库和文件shell脚本

#!/bin/bash
#2009-11-8 第一次编写
#作者:duanyunxi
#版本:v1.1
#备份脚本

##设置备份##
echo "##开始设置备份!##"
if [ -f /etc/crontab ]; then
RETVAL=`service cron status|grep 'running'`
if [ "$RETVAL" != "" ]; then

echo "请选择备份格式(s:数据库|t:tar.gz压缩包)?"
read ENCODE

#################数据库sql脚本备份###########
if [ "$ENCODE" == "s" ] || [ "$ENCODE" == "S" ]; then
##提示输入mysql管理员用户root的密码##
RETVAL="1"
until [ $RETVAL -eq 0 ]
do
echo "请输入mysql管理员用户root的密码"
read MYSQLPASSWD
mysqladmin -uroot -p$MYSQLPASSWD version 1> /dev/null 2>&1
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
echo "mysql管理员root密码输入正确!"
else
echo "mysql管理员密码错误,请重新输入!"
fi
done

##提示输入要备份的数据库名##
echo "请输入要备份数据库名,例如:icfjkcms"
INPUT="n"
until [ "$INPUT" == "Y" ] || [ "$INPUT" == "y" ]
do
read DATABASE
echo "您输入的数据库名是:$DATABASE,请确认(y|n)?"
read INPUT
if [ "$INPUT" != "Y" ] && [ "$INPUT" != "y" ]; then
echo "请输入要备份数据库名,例如:icfjkcms"
else
echo "您输入的备份数据库名为:$DATABASE"
fi
done


##提示输入备份频率##
echo "***定时备份频率格式:分 时 天 月 一周第几天"
echo "***例如:*/20 6-12 * 12 * 表示在12月内,每天的早上6点到12点中,每隔20分钟执行一次"
echo "请输入备份频率,例如:*/2 * * * *"
INPUT="n"
until [ "$INPUT" == "Y" ] || [ "$INPUT" == "y" ]
do
read RATE
echo "您输入的备份频率是:$RATE,请确认(y|n)?"
read INPUT
if [ "$INPUT" != "Y" ] && [ "$INPUT" != "y" ]; then
echo "请输入备份频率,例如:*/2 * * * *"
else
echo "您输入的备份频率为:$RATE"
fi
done




DAY=`date +%Y%m%d`
TIME=`date +%H%M%S`

###备份文件备份脚本存放目录###
mkdir -p /var/backup/$DAY/sh

echo "生成备份的脚本文件"
echo "#!/bin/bash" >> /var/backup/$DAY/sh/$DATABASE-SQL$TIME.sh
echo "BACKDAY=\`date +%Y%m%d%H%M\`" >> /var/backup/$DAY/sh/$DATABASE-SQL$TIME.sh
echo "mysqldump --default-character-set=utf8 -hlocalhost -uroot -p$MYSQLPASSWD -B -d --opt -q $DATABASE > /var/backup/$DAY/DDL$DATABASE-\$BACKDAY.sql ;" >> /var/backup/$DAY/sh/$DATABASE-SQL$TIME.sh
echo "mysqldump --default-character-set=utf8 -hlocalhost -uroot -p$MYSQLPASSWD -B -t --opt -q $DATABASE > /var/backup/$DAY/DML$DATABASE-\$BACKDAY.sql ;" >> /var/backup/$DAY/sh/$DATABASE-SQL$TIME.sh
chmod 775 /var/backup/$DAY/sh/$DATABASE-SQL$TIME.sh
echo "备份脚本生成完成"


###写README文件
echo "写README文件"
echo "制作人:段云喜" >> /var/backup/$DAY/sh/$DATABASE-SQL$TIME.readme
echo "制作时间:$DAY" >> /var/backup/$DAY/sh/$DATABASE-SQL$TIME.readme
echo "$DATABASE-SQL$TIME.sh为备份$DATABASE数据库脚本" >> /var/backup/$DAY/sh/$DATABASE-SQL$TIME.readme
echo "cron执行$DATABASE-SQL$TIME.sh频率是$RATE" >> /var/backup/$DAY/sh/$DATABASE-SQL$TIME.readme
echo "备份生成的sql脚本在/var/backup/$DAY目录下" >> /var/backup/$DAY/sh/$DATABASE-SQL$TIME.readme
echo "备份文件完成,去/var/backup/$DAY/sh/里查看$DATABASE-SQL$TIME.readme文件"


sleep 3

echo "停cron服务"
service cron stop

###定时备份---每隔二分钟备份一次###
echo " $RATE root test -x /var/backup/$DAY/sh/$DATABASE-SQL$TIME.sh && /var/backup/$DAY/sh/$DATABASE-SQL$TIME.sh" >>/etc/crontab

sleep 3

echo "开启cron服务"
service cron start
echo "备份配置完成!"


#################文件夹/文件tar.gz打包备份###########
elif [ "$ENCODE" == "t" ] || [ "$ENCODE" == "T" ]; then

echo "请输入备份文件名前缀,例如:www"
INPUT="n"
until [ "$INPUT" == "Y" ] || [ "$INPUT" == "y" ]
do
read PREFIX
echo "您输入的备份文件名前缀是:$PREFIX,请确认(y|n)?"
read INPUT
if [ "$INPUT" != "Y" ] && [ "$INPUT" != "y" ]; then
echo "请输入备份文件名前缀,例如:www:"
else
echo "您输入的备份文件名前缀为:$PREFIX"
fi
done

echo "请输入要备份的路径,例如:/usr/local/site"
INPUT="n"
until [ "$INPUT" == "Y" ] || [ "$INPUT" == "y" ]
do
read DATAPATH
echo "您输入要备份的路径是:$DATAPATH,请确认(y|n)?"
read INPUT
if [ "$INPUT" != "Y" ] && [ "$INPUT" != "y" ]; then
echo "请输入要备份的路径,例如:/usr/local/site:"
else
echo "你要备份的路径为:$DATAPATH"
fi
done

echo "请输入备份路径中不备份的文件或文件夹:(多个用空格隔开) 如果没有直接确认!"
INPUT="n"
until [ "$INPUT" == "Y" ] || [ "$INPUT" == "y" ]
do
read FILES
echo "您输入不备份的文件或文件夹是:$FILES,请确认(y|n)?"
read INPUT
if [ "$INPUT" != "Y" ] && [ "$INPUT" != "y" ]; then
echo "请输入备份路径中不备份的文件或文件夹:(多个用空格隔开)"
else
echo "您输入不备份的文件或文件夹是:$FILES"
fi
done


##提示输入备份频率##
echo "***定时备份频率格式:分 时 天 月 一周第几天"
echo "***例如:*/20 6-12 * 12 * 表示在12月内,每天的早上6点到12点中,每隔20分钟执行一次"
echo "请输入备份频率,例如:*/2 * * * *"
INPUT="n"
until [ "$INPUT" == "Y" ] || [ "$INPUT" == "y" ]
do
read RATE
echo "您输入的备份频率是:$RATE,请确认(y|n)?"
read INPUT
if [ "$INPUT" != "Y" ] && [ "$INPUT" != "y" ]; then
echo "请输入备份频率,例如:*/2 * * * *"
else
echo "您输入的备份频率为:$RATE"
fi
done



DAY=`date +%Y%m%d`
TIME=`date +%H%M%S`

###备份文件备份脚本存放目录###
mkdir -p /var/backup/$DAY/sh

for FILE in $FILES
do
EXCLUDE="$EXCLUDE --exclude $FILE"
done

echo "生成备份的脚本文件"
echo "#!/bin/bash" >> /var/backup/$DAY/sh/$PREFIX-TAR$TIME.sh
echo "BACKDAY=\`date +%Y%m%d%H%M\`" >> /var/backup/$DAY/sh/$PREFIX-TAR$TIME.sh
echo "cd $DATAPATH" >> /var/backup/$DAY/sh/$PREFIX-TAR$TIME.sh
echo "tar $EXCLUDE -zcpf /var/backup/$DAY/$PREFIX-\$BACKDAY.tar.gz ." >> /var/backup/$DAY/sh/$PREFIX-TAR$TIME.sh
chmod 775 /var/backup/$DAY/sh/$PREFIX-TAR$TIME.sh
echo "备份脚本生成完成"


###写README文件
echo "写README文件"
echo "制作人:段云喜" >> /var/backup/$DAY/sh/$PREFIX-TAR$TIME.readme
echo "制作时间:$DAY" >> /var/backup/$DAY/sh/$PREFIX-TAR$TIME.readme
echo "$PREFIX-TAR$TIME.sh 为备份$DATAPATH的脚本 不包括$FILES" >> /var/backup/$DAY/sh/$PREFIX-TAR$TIME.readme
echo "cron执行$PREFIX-TAR$TIME.sh频率是$RATE" >> /var/backup/$DAY/sh/$PREFIX-TAR$TIME.readme
echo "备份生成的tar.gz压缩包在/var/backup/$DAY目录下" >> /var/backup/$DAY/sh/$PREFIX-TAR$TIME.readme
echo "备份文件完成,去/var/backup/$DAY/sh/里查看$PREFIX-TAR$TIME.readme文件"


sleep 3

echo "停此cron服务"
service cron stop

###定时备份---每隔二分钟备份一次###
echo " $RATE root test -x /var/backup/$DAY/sh/$PREFIX-TAR$TIME.sh && /var/backup/$DAY/sh/$PREFIX-TAR$TIME.sh" >>/etc/crontab

sleep 3

echo "开启cron服务"
service cron start
echo "备份配置完成!"

fi

fi
fi

你可能感兴趣的:(linux-centos)