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. html5--3.14 lable元素和label属性

    html5--3.14 lable元素和label属性 学习要点 掌握label元素的使用 掌握label属性的使用 lable元素 用来为 input 元素定义标注(标记),建立一个与之相关联的标签 ...

  2. github如何提交自己修改的代码

    当在github上发现别人项目有BUG,或者想要完善其功能的时候,该如何把自己的修改提交到项目中呢? 以logback为例 步骤: 1, fork一份logback代码到自己的仓库 进入github要 ...

  3. tensorflow 线性回归解决 iris 2分类

    # Combining Everything Together #---------------------------------- # This file will perform binary ...

  4. http://www.cnblogs.com/yaozhenfa/archive/2015/06/14/4574898.html

    笔者这里采用的是mongoDB官网推荐使用.net驱动: http://mongodb.github.io/mongo-csharp-driver/2.0/getting_started/quick_ ...

  5. codevs 1154 能量项链

    传送门 1154 能量项链 2006年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold   题目描述 Description 在Mars星 ...

  6. 全民nib

    1.为任何组件创建nib文件 那么如何通过XIB来创建自己的个性化的class呢. 1.Add----New Filss---Cocoa Touch Classes---Object-C  Class ...

  7. MongoDB分析工具之三:db.currentOp()

    db.currentOp() db.currentOp是个好东西,顾名思义,就是当前的操作.在mongodb中可以查看当前数据库上此刻的操作语句信息,包括insert/query/update/rem ...

  8. disablescroll

    页面的设置 disablescroll:true(需要配合设置 enablePullDownRefresh:false ) 可以实现页面上下不能滑动 另一种实现方法: 设置页面的根元素 绝对定位, p ...

  9. JS正则表达式(一)

    正则表达常用符号 /..../  开始结束 ^ 开始 $ 结束 /s 任何非空字符  /S 非空 /d  匹配一个数字=[0-9] /D  匹配一个非数字=[^0-9] /w   匹配一个数字,下划线 ...

  10. Linux命令行设置环境变量

    参考  Linux命令行--使用linux环境变量  Linux命令行—使用Linux环境变量