1、备份规则:

  在生产环境中有若干服务器需要定时将服务器中应用程序,以及数据库等进行备份。要求在本地服务器中保存近一周的备份,备份服务器中保存最近一月的备份文件。

                               

  以服务器A为例:在服务器A上有应用程序业务及(/ucap/UServer_V5.5.1_5002),有数据库业务(mongodb和mysql)需要将以上三个业务进行备份,且在A服务器上创建backup-dir将备份文件存放在目录下,每日凌晨进行备份,并将备份文件上传至备份服务器(NFS),在平时备份服务器与服务器A不会有联系,即只是在上传备份文件,服务器A自动挂载备份文件共享目录,备份完成卸载目录。本地服务器保存近一周文件,备份服务器保存近30日备份文件。

2、具体实现如下步骤:

  

 #delet backup when is sunday   周日删除上周文件。
WEEK=$(date +%w)
BACKUP_ROOT=/backup
BACKUP_DIR=/backup/backup_full_`date +%F`
if [ -e $BACKUP_ROOT ]
then
cd $BACKUP_ROOT #如果/backup目录存在,进入目录。
if [ $WEEK -eq ]
then
rm -rf $BACKUP_ROOT/* #如果进入是星期天(0表示星期天)执行删除/backup下所有的备份文件。
fi
if [ $? -eq 0 ] #判断是否删除成功
then
action "old-backup is remove." /bin/true
fi fi
####mkdir backup-dir #创建本地备份目录。如果目录存在则输出目录已经存
#在,否则表示不存在目录则创建包含时间的目录文件目录
if [ -e $BACKUP_DIR ]
then
action "$BACKUP_DIR had been created." /bin/true
else
#含当前时间的目录文件实际可以用$BACKUP_DIR
mkdir -p /backup/backup_full_`date +%F`
action "$BACKUP_DIR is creating." /bin/true
fi

本地创建备份目录及周日删除

  注意:周日删除必须在创建当天目录之前。因为一旦先创建目录在删除文件由于使用的是rm -rf $BACKUP_ROOT/*意思是将本地备份目录下的所有文件删除,所有新创建的目录也会被删除。因此应该执行先删除再创建。

 ###tar backup  /ucap/UServer_V5..1_5002
CMSP=/ucap
cd $CMSP
FILE_UCM=UServer_V5..1_5002
#使用tar -g快照功能进行备份将快照snapshot.cms也存放在备份目录下,然后将备份文件按照ip地址以及日期进行打包存放在备份目录下的当日文件目录下。
tar -g $BACKUP_ROOT/snapshot.cms -cvf $BACKUP_DIR/${FILE_UCM}_ip_1.25_backup.$(date +%F).tar $FILE_UCM >/dev/null >& if [ $? = ] #判断是否执行成功。
then
action "$FILE_UCM is backup." /bin/true
else
action "$FILE_UCM is no been backuped." /bin/true
fi
###tar backup /ucap/mongodb
CMSP=/ucap
cd $CMSP
FILE_UCM=mongodb
#备份规则同上。
tar -g $BACKUP_ROOT/snapshot.cms -cvf $BACKUP_DIR/${FILE_UCM}_ip_1.25_backup.$(date +%F).tar $FILE_UCM >/dev/null >& if [ $? = ]
then
action "$FILE_UCM is backup." /bin/true
else
action "$FILE_UCM is no been backuped." /bin/true
fi

备份文件及mongodb

 #parameter defined
BAKDATE=`date +%F`
MYSQL_PATH=/usr/local/mysql/bin
MYUSER=root
MYPASS="Ucap7890&*()"
#DBNAME=`mysql -uroot -p'Ucap7890&*()' -e "show databases;"|grep cpmdb`
DATA_FILE=${BACKUP_DIR}/mysql_backup_${BAKDATE}.sql.gz
[ ! -d ${BACKUP_DIR} ] && mkdir -p ${BACKUP_DIR}
#command defined
#定义mysqldump命令备份cpmdb库并进行行锁
MYSQL_DUMP="${MYSQL_PATH}/mysqldump -u$MYUSER -p$MYPASS -S /tmp/mysql.sock -F -B cpmdb --single-transaction -e"
#backup command#执行命令并用GZI打包至备份目录当前日期下的文件中。
${MYSQL_DUMP} | gzip > $DATA_FILE

Mysql备份

 #####copye backup_tar to backup_server
BACKUP_SERVER=23.202.1.23:/backup/Search #NFS备份服务器
LOCAL_DIR=/backup1 #本地挂载点
RPC_PID=`/etc/init.d/rpcbind status|wc -l` #判断RPC
MOUNT_STATUS=`df -h | grep backup1 | wc -l` #判断是否已经挂载
BACKUP_FILEDIR=backup_full_`date +%F`
SERVER_IP=`ifconfig| grep Bcast|awk '{print $2}'` #本机IP
if [ ! -e ${LOCAL_DIR} ] #判断挂载点目录是否存在
then
mkdir ${LOCAL_DIR}
fi if [ ${RPC_PID} -eq ] #判断RPC-BIND是否启动没有启动执行启动
then
/etc/init.d/rpcbind start
fi
if [ $MOUNT_STATUS -eq ] #判断NFS是否挂载没有挂载执行挂载
then
mount -t nfs ${BACKUP_SERVER} ${LOCAL_DIR}
cd ${LOCAL_DIR} #进入挂载目录
find ${LOCAL_DIR} -mtime + -exec rm{} \; #删除30天以前文件
if [ `find ${LOCAL_DIR} -mtime + -exec ls{} \;|wc -l` -eq ] #如果没有了30天前的文件将本地备份目录下的备份文件备份至备份服务器。
then
cd $BACKUP_ROOT
cp -r ${BACKUP_FILEDIR} ${LOCAL_DIR}/
fi
if [ $? -eq ] #判断执行是否成功,成功后卸载挂载目录。
then
umount -l ${LOCAL_DIR}
fi
else #表示已经挂载了NFS备份服务器执行删除备份卸载。
cd ${LOCAL_DIR}
find ${LOCAL_DIR} -mtime + -exec rm{} \;
cd $BACKUP_ROOT
cp -r ${BACKUP_FILEDIR} ${LOCAL_DIR}/
umount -l ${LOCAL_DIR}
exit
fi

本地备份存放至本分服务器并删除30日前的备份文件

3、整个脚本,由于本分脚本中含有数据库密码所有在最好做判断只有root用户才能执行脚本。

 #!/bin/bash
##########################################
# this script is created by xuxuedong. #
# e_mail:***@qq.com #
# qqinfo:*** #
# This is backup the fiel for the server. #
# version:1.1 #
##########################################
. /etc/init.d/functions
#set env
export PATH=$PATH:/bin:/sbin:/usr/sbin
export LANG="zh_CN.GB18030" # Require root to run this script. 判断是否是root用户执行。
if [[ "$(whoami)" != "root" ]]; then
echo "Please run this script as root." >&
exit
fi # Source function library.
#. /etc/init.d/functions
WEEK=$(date +%w)
BACKUP_ROOT=/backup
BACKUP_DIR=/backup/backup_full_`date +%F`
if [ -e $BACKUP_ROOT ]
then
cd $BACKUP_ROOT
if [ $WEEK -eq ]
then
rm -rf $BACKUP_ROOT/*
fi
if [ $? -eq 0 ]
then
action "old-backup is remove." /bin/true
fi
else
echo "Time is not, cannot be deleted." /bin/false fi
####mkdir backup-dir
if [ -e $BACKUP_DIR ]
then
action "$BACKUP_DIR had been created." /bin/true
else
mkdir -p /backup/backup_full_`date +%F`
action "$BACKUP_DIR is creating." /bin/true
fi
###tar backup /ucap/UServer_V5.5.1_5002
CMSP=/ucap
cd $CMSP
FILE_UCM=UServer_V5.5.1_5002
tar -g $BACKUP_ROOT/snapshot.cms -cvf $BACKUP_DIR/${FILE_UCM}_ip_1.25_backup.$(date +%F).tar $FILE_UCM >/dev/null 2>&1 if [ $? = 0 ]
then
action "$FILE_UCM is backup." /bin/true
else
action "$FILE_UCM is no been backuped." /bin/true
fi
###tar backup /ucap/mongodb
CMSP=/ucap
cd $CMSP
FILE_UCM=mongodb
tar -g $BACKUP_ROOT/snapshot.cms -cvf $BACKUP_DIR/${FILE_UCM}_ip_1.25_backup.$(date +%F).tar $FILE_UCM >/dev/null 2>&1 if [ $? = 0 ]
then
action "$FILE_UCM is backup." /bin/true
else
action "$FILE_UCM is no been backuped." /bin/true
fi
#parameter defined
BAKDATE=`date +%F`
MYSQL_PATH=/usr/local/mysql/bin
MYUSER=root
MYPASS="Ucap7890&*()"
#DBNAME=`mysql -uroot -p'Ucap7890&*()' -e "show databases;"|grep cpmdb`
DATA_FILE=${BACKUP_DIR}/mysql_backup_${BAKDATE}.sql.gz
[ ! -d ${BACKUP_DIR} ] && mkdir -p ${BACKUP_DIR}
#command defined
MYSQL_DUMP="${MYSQL_PATH}/mysqldump -u$MYUSER -p$MYPASS -S /tmp/mysql.sock -F -B cpmdb --single-transaction -e"
#backup command
${MYSQL_DUMP} | gzip > $DATA_FILE #####copye backup_tar to backup_server
BACKUP_SERVER=23.202.1.23:/backup/Search
LOCAL_DIR=/backup1
RPC_PID=`/etc/init.d/rpcbind status|wc -l`
MOUNT_STATUS=`df -h | grep backup1 | wc -l`
BACKUP_FILEDIR=backup_full_`date +%F`
SERVER_IP=`ifconfig| grep Bcast|awk '{print $2}'`
if [ ! -e ${LOCAL_DIR} ]
then
mkdir ${LOCAL_DIR}
fi if [ ${RPC_PID} -eq 0 ]
then
/etc/init.d/rpcbind start
fi
if [ $MOUNT_STATUS -eq 0 ]
then
mount -t nfs ${BACKUP_SERVER} ${LOCAL_DIR}
cd ${LOCAL_DIR}
find ${LOCAL_DIR} -mtime +30 -exec rm{} \;
if [ `find ${LOCAL_DIR} -mtime +30 -exec ls{} \;|wc -l` -eq 0 ]
then
cd $BACKUP_ROOT
cp -r ${BACKUP_FILEDIR} ${LOCAL_DIR}/
fi
if [ $? -eq 0 ]
then
umount -l ${LOCAL_DIR}
fi
else
cd ${LOCAL_DIR}
find ${LOCAL_DIR} -mtime +30 -exec rm{} \;
cd $BACKUP_ROOT
cp -r ${BACKUP_FILEDIR} ${LOCAL_DIR}/
umount -l ${LOCAL_DIR}
exit 1
fi

所有脚本

shell脚本实现自动化备份的更多相关文章

  1. Shell脚本,自动化发布tomcat项目【转载】

    Shell脚本,自动化发布tomcat项目脚本. 1. vko2c_auto_build_by_scp.sh 文件内容: #---------------------start------------ ...

  2. Shell脚本,自动化发布tomcat项目【转】

    Shell脚本,自动化发布tomcat项目脚本. 1. vko2c_auto_build_by_scp.sh 文件内容: #---------------------start------------ ...

  3. 使用shell脚本定时执行备份mysql数据库

    使用shell脚本定时执行备份mysql数据库 #!/bin/bash ############### common file ################ #本机备份文件存放目录 MYSQLBA ...

  4. Centos上通过shell脚本实现数据库备份和还原

    最近有个这样的需求,通过shell脚本实现数据库备份还原,最后通过网上查询自己测试实现,将脚本分享给大家 1.数据库备份脚本 #!/bin/bash ds=`` list=`date +%Y`/`da ...

  5. 用shell脚本实现定时备份数据库

    1.备份数据库的方法 可以使用命令查看 ls  /usr/local/mysql/bin 这个mysqldump就是系统内置的用来备份数据库的工具. 2.实现方法 ①先随便进入一个位置创建一个目录 ② ...

  6. shell脚本每天自动备份mysql数据库

    一.mysql提供了一个mysqldump的工具可以方便的导出导入数据库信息: 二.使用命令行shell测试执行mysqldump,理解必备的参数,查看生成的sql备份文件是否符合需求: /usr/b ...

  7. 使用shell脚本来自动化处理我们的工作,解放双手

    Shell脚本介绍 1.Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shell脚本就是一系列命令的集合. 2.Shell可以直接使用在wi ...

  8. shell脚本实现定时备份某文件

    1:目标       实现在图像化界面输入需要备份的源文件路径.目标路径,定时的时间.然后通过输入的信息,把需要备份的源文件打包放到指定的目标路径下以执行定时任务的时间为子目录       把/she ...

  9. 使用shell脚本完成自动化部署及秒级回滚

    一.部署机代码目录结构 使用www用户进行代码部署,所有部署机上需要创建www用户,并赋予根目录权限,同时配置公私钥认证建立信任关系. [www@ansible-node1 deploy]$ tree ...

随机推荐

  1. 从Inception v1,v2,v3,v4,RexNeXt到Xception再到MobileNets,ShuffleNet,MobileNetV2

    from:https://blog.csdn.net/qq_14845119/article/details/73648100 Inception v1的网络,主要提出了Inceptionmodule ...

  2. Session移除

    Session.Clear()就是把Session对象中的所有项目都删除了,Session对象里面啥都没有.但是Session对象还保留. Session.Abandon()就是把当前Session对 ...

  3. web安全字体

    webfont解剖 Unicode字体可以包含数以千计字形 有四个字体格式: WOFF2, WOFF, EOT, TTF 一些字体格式需要使用GZIP压缩 一个web字体是字形的集合,且每个字形是一个 ...

  4. 值域线段树 (玲珑OJ 1117)

    点击打开题目链接 题目意思很简单: 1.插入x 2.把小于x的数变成x 3.把大于x的数变成x 4.求集合中第x小数 5.求集合中小于x的数个数 思路: 线段树,节点是值的分数,你可以离散,也可以不离 ...

  5. Sports

    题目链接 : http://acm.hpu.edu.cn/problem.php?id=1184 或者       http://acm.nyist.net/JudgeOnline/problem.p ...

  6. codeforces 702A A. Maximum Increase(水题)

    题目链接: A. Maximum Increase time limit per test 1 second memory limit per test 256 megabytes input sta ...

  7. bzoj 4398 福慧双修——二进制分组

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4398 如果枚举1号点走哪些点出去,就从那些点出发跑多源最短路即可.最短路不会重复经过一条边. ...

  8. GC及其作用

    Java GC 是垃圾回收机制,自动内存管理和垃圾清扫机制,释放内存中的资源和垃圾

  9. nohup 命令 print 不能实时输出至 nohup.out

    1. 原因 Python 的输出存在缓冲机制,因此不能实时输出结果至 nohup.out 2. 解决方案 用下面的命令即可解决: nohup python -u FileName > nohup ...

  10. java:calendar类及一些比较实用的utils(二)

    在这里将我在项目中用到的一些关于使用Calendar的utils分享出来,只是一部分,后期遇到好的通用方法会继续添加,以和大家交流学习,如果你还不熟悉这个类的使用,但是急需某个util,可以加群:41 ...