SVN备份/恢复脚本

上一篇介绍了svn的配置,这里就写了两个脚本对svn进行全备和恢复,由于是全备,所以可以做个计划任务,每天执行一次即可。保留几天的数据。

1、备份脚本:

#!/bin/sh
#
#
# Description: SVN full backup of the project
# Author: Mr.chen
# Date: 2015/02/10
# Email: 
#
#
SVN_BASICDIR="/usr/local/svn/bin"
DAY=5		# Backup files keep days
TIME=`date +%Y%m%d%H%M`
SVNPATH="/data/svn"
BAKDIR="/data/svnbak"
BAKPATH=${BAKDIR}/${TIME}
BAKLOG=${BAKDIR}/bak_svn.log
PROJECT=`/bin/ls -lh ${SVNPATH} | grep -E "^d" | awk ‘{print $NF}‘`
CONIFIG_FILE=`/bin/ls -lh ${SVNPATH} | grep -E "^-" | awk ‘{print $NF}‘`

! type lftp &> /dev/null && echo "Lftp command does not exist,Plz install lftp." && exit 128

[ ! -d "${BAKPATH}" ] && mkdir -p ${BAKPATH}

make_log() {
    /bin/echo -e "[ $(date +%Y-%m-%d‘ ‘%H:%M:%S) ] ${1}" >> ${BAKLOG}
}

tar_bakfile() {
    cd ${BAKDIR}
    make_log "tar zcf ${1##*/}.tgz ${1##*/}"
    tar zcf ${1##*/}.tgz ${1##*/} &> /dev/null

    make_log "rm -rf ${1##*/}"
    rm -rf ${1##*/} &> /dev/null
    cd
    echo "" >> ${BAKLOG}
}

rm_expired() {
    cd ${1}
    _DAY_=`date -d"${DAY} days ago" +%Y%m%d`
    ls | grep ${_DAY_} | xargs rm -rf
    cd
}

ftp_upload() {
    #################################
    #FTP upload
    cd ${BAKDIR}
    #echo "Start upload file: `date`"
    FTPHOST="x.x.x.x"
    FTPPORT="21"
    FTPUSER="xxx"
    FTPPASSWD="xxx"
    FTPDOCUMENT="xxx"

/usr/bin/lftp << EOF
open -p $FTPPORT ftp://$FTPUSER:[email protected]$FTPHOST/$FTPDOCUMENT
put $1
EOF

    #echo "Upload file end: `date`"
    ##################################
}

for i in ${CONIFIG_FILE};do
    cp ${SVNPATH}/${i} ${BAKPATH}/
    [ $? != 0 ] && echo "Configuration file backup failed..." >> ${BAKLOG} && ls -ldh ${BAKDIR}/* | grep ‘^d‘ | awk ‘{print $NF}‘ | xargs rm -rf && exit 121
done

make_log "=============== Start Backup ==============="
for _bak_project_ in ${PROJECT};do
    make_log "${SVN_BASICDIR}/svnadmin hotcopy ${SVNPATH}/${_bak_project_} ${BAKPATH}/${_bak_project_}"
    ${SVN_BASICDIR}/svnadmin hotcopy ${SVNPATH}/${_bak_project_} ${BAKPATH}/${_bak_project_} &> /dev/null
    if [ $? != 0 ];then
        echo "Project ${_bak_project_} backup failed, Plz check..." >> ${BAKLOG}
        ls -ldh ${BAKDIR}/* | grep ‘^d‘ | awk ‘{print $NF}‘ | xargs rm -rf
        exit 122
    fi
done
make_log "================ End Backup ================" && echo "" >> ${BAKLOG}
make_log "=============== Start Check ==============="

for _check_proejct_ in ${PROJECT};do
    make_log "${SVN_BASICDIR}/svnlook youngest ${BAKPATH}/${_check_proejct_}"
    ${SVN_BASICDIR}/svnlook youngest ${BAKPATH}/${_check_proejct_}&> /dev/null
    if [ $? != 0 ];then
        echo "Project ${_check_proejct_} backup file Invaild.Plz check..." >> ${BAKLOG}
        ls -ldh ${BAKDIR}/* | grep ‘^d‘ | awk ‘{print $NF}‘ | xargs rm -rf
        exit 123
    fi
done
make_log "================ End Check ================" && echo "" >> ${BAKLOG}

tar_bakfile "${BAKPATH}"
if [ $? != 0 ];then
    make_log "Compressed file error."
    echo "Compressed file error."
    exit 124
else
   ftp_upload "${BAKPATH##*/}.tgz"
   rm_expired "${BAKDIR}"
fi

# 此脚本对svn的库进行全备,并且上传至FTP服务器保留一份。

2、恢复脚本

#!/bin/sh
#
# Description: Download the backup file and restore from the FTP server
# Author: Mr.chen
# Date: 2015/02/10
# Email:
#
#
# Require: SVN environment is normal
#
SVN_USER="svn"
SVN_BASICDIR="/usr/local/svn/bin"
YESTERDAY=`date -d‘1 days ago‘ +%Y%m%d`
SVNDIR="/data/svn"
DOWNLOAD_DIR="/data/download"
LOGFILE="${DOWNLOAD_DIR}/svn_recover.log"

FTPHOST="x.x.x.x"
FTPPORT="x"
FTPUSER="xxx"
FTPPASSWD="xxxxxx"
FTPDOCUMENT="xxx"

[ ! -d ${DOWNLOAD_DIR} ] && mkdir -p ${DOWNLOAD_DIR}

make_log() {
    /bin/echo -e "[ $(date +%Y-%m-%d‘ ‘%H:%M:%S) ] ${1}" >> ${LOGFILE}
}

ftp_download() {
    ############################
    # Backup file download
    cd ${1}
    #echo "Start download file: `date`"

/usr/bin/lftp << EOF
open -p $FTPPORT ftp://$FTPUSER:[email protected]$FTPHOST/$FTPDOCUMENT
mirror -i ${YESTERDAY}.*.tgz
EOF
    cd    
    #echo "Download file end: `date`"
    ############################
}

extract() {
    cd ${1}
    make_log "tar xf *.tgz"
    tar xf *.tgz &> /dev/null
    make_log "rm -f *.tgz"
    rm -f *.tgz &> /dev/null
}

ftp_download "${DOWNLOAD_DIR}"
if [ `ls ${DOWNLOAD_DIR} | grep "tgz$"` ];then
    extract "${DOWNLOAD_DIR}"
    BAKDIR=`ls ${DOWNLOAD_DIR} | grep -Ev "log"`
    #
    # Recover SVN Project
    make_log "=========== [`date +%Y/%m/%d‘ ‘%H:%M`] Start Recover ==========="
    for _project_ in `ls -lh ${DOWNLOAD_DIR}/${BAKDIR} | grep "^d" | awk ‘{print $NF}‘`; do
        if [ ! -d ${SVNDIR}/${_project_} ];then
            make_log "mkdir -p ${SVNDIR}/${_project_}"
            mkdir -p ${SVNDIR}/${_project_} &> /dev/null
        else
            echo "Project directory exist." >> ${LOGFILE}
            exit 127
        fi
        make_log "${SVN_BASICDIR}/svnadmin hotcopy ${DOWNLOAD_DIR}/${BAKDIR}/${_project_} ${SVNDIR}/${_project_}"
        ${SVN_BASICDIR}/svnadmin hotcopy ${DOWNLOAD_DIR}/${BAKDIR}/${_project_} ${SVNDIR}/${_project_} &> /dev/null
        make_log "${SVN_BASICDIR}/svnlook youngest ${SVNDIR}/${_project_}"
        ${SVN_BASICDIR}/svnlook youngest ${SVNDIR}/${_project_} &> /dev/null
        if [ $? != 0 ];then
            echo "Recover Failed." >> ${LOGFILE}
            exit 125
        fi
    done
    echo "" >> ${LOGFILE}
    #
    # Copy configuration file
    for _config_file_ in `ls -lh ${DOWNLOAD_DIR}/${BAKDIR} | grep "^-" | awk ‘{print $NF}‘`; do
        #make_log "cp ${DOWNLOAD_DIR}/${BAKDIR}/${_config_file_} ${SVNDIR}"
        #make_log "chown svn.svn ${SVNDIR}/${_config_file_}"
        cp ${DOWNLOAD_DIR}/${BAKDIR}/${_config_file_} ${SVNDIR}
    done
    make_log "chown -R ${SVN_USER}.${SVN_USER} ${SVNDIR}"
    make_log "rm -rf ${DOWNLOAD_DIR}/${BAKDIR}"
    rm -rf ${DOWNLOAD_DIR}/${BAKDIR}
    chown -R ${SVN_USER}.${SVN_USER} ${SVNDIR} &> /dev/null
    make_log "=========== [`date +%Y/%m/%d‘ ‘%H:%M`] Recover Finish ==========="
    echo "" >> ${LOGFILE}
    #echo "Recover SVN Project successfull."
else
    make_log "Download Backup File Failed."
    echo "" >> ${LOGFILE}
    echo "Download Backup File Failed.Plz Check..."
    exit 122
fi

# 从FTP的服务器下载备份脚本,并自动恢复到指定目录

有可能有很多不是很完善,如需要可以自己随便改改就行了。

时间: 2024-10-13 10:29:48

SVN备份/恢复脚本的相关文章

备份恢复脚本

# cat my_full_backup.sh #!/bin/bash BEGINTIME=`date +"%Y-%m-%d %H:%M:%S"` format_time=`date +"%Y-%m-%d_%H:%M:%S"` week=`date +%w` port=3306 ip=192.168.1.101 backdir=/tmp/xtrabackup file_cnf=/app/mysqldata/3306/my.cnf user_name=xtrabk p

xtrabackup备份恢复测试 -转

Chinaunix首页 | 论坛 | 认证专区 | 博客 登录 | 注册 博文      博主 王恒-Henryhengwang.blog.chinaunix.net 我的项目:https://github.com/HengWang/ ChinaUnix博客技术文章推荐标准和规范 有奖征集:文集--博客系列博文管理 CU博客频道6月技术图书有奖试读活动 首页 | 博文目录 | 关于我 king_wangheng 博客访问: 486455 博文数量: 117 博客积分: 1715 博客等级: 上尉

SVN自动化备份、恢复脚本(下)

#!/bin/bash #本脚本是用来计算本地磁盘空间大小,并且与svn备份文件大小进行比较判断,当满足什么条件时,做出相应的响应. #第一步是检测svn服务器,svn数据文件的总量大小和本机磁盘剩余空间的大小. ##连接10.68.3.152服务器,查看最新svn文件大小,获取查看的值. datef() {         date "+%Y/%m/%d %H:%M" } password=xxxx2015 svnreport=/data/log/report_`date "

svn备份脚本

svn备份一般采用三种方式:1)svnadmin dump 2)svnadmin hotcopy 3)svnsync. 注意,svn备份不宜采用普通的文件拷贝方式(除非你备份的时候将库暂停),如copy命令.rsync命令. 笔者曾经用 rsync命令来做增量和全量备份,在季度备份检查审计中,发现备份出来的库大部分都不可用,因此最好是用svn本身提供的功能来进行备份. 优缺点分析============== 第一种svnadmin dump是官方推荐的备份方式,优点是比较灵活,可以全量备份也可以

SVN备份,一个强大脚本

公司有台SVN服务器,平时不经常备份.领导最近要求说要定期备份,于是整理了一个脚本,这个脚本是一个网友写的吧,感觉不错,然后就翻译了一次.也收藏下,如果看着排版就把附件下载下来用notepad++看吧,在此也谢谢这个脚本的原创作者,感谢分享 @echo off ##关闭显示处理过程. rem -----设置环境变量-------##rem在cmd中是注释的意思,和::差不多 rem -----设置SVN目录--------  set svnpath=C:\Repositories\##set设置

SVN备份及恢复

一,SVN备份 svnadmin dump /data/svn/blzfmima/ > /tmp/full.svn.bak 其中/data/svn/blzfmima/为svn文件夹,导出成一个备份文件 二,SVN恢复 创建恢复文件夹 svnadmin create /tmp/TestProject 导入备份文件 svnadmin load /tmp/TestProject/ < /tmp/full.svn.bak 原文地址:https://www.cnblogs.com/minseo/p/86

svn备份与还原_脚本_(dump命令)

今天备份svn, 能保证好用就行先, 回头再研究 buerguo.bat @echo off :: 关闭回显 :: 说明:如有命令不明白,请使用帮助命令:命令/? .如:for/? :: 设置标题 title SVN备份脚本 rem 设置变量 :: SVN_HOME svn程序的安装路径,指定到bin目录上一级.(如果路径有空格,请用"".) set SVN_HOME=D:\Develop\VisualSVNServer :: SVN库的路径 set SVN_ROOT=D:\Repos

企业实战:mysql5.6数据库备份、恢复脚本

一.mysql数据库备份脚本 备份脚本1: [[email protected] scripts]# vim elab_fenku_backup.sh #!/bin/sh #create at 2018-01-08 #author oldboy #qq 88888 echo "--------------------------ychfq:`date +%F-%H`--------------------------" DB_USER="oldboy_bak" DB

svn备份一般采用三种方式

http://www.cnblogs.com/itech/archive/2011/10/11/2206988.html 备份策略 ============== svn备份一般采用三种方式:1)svnadmin dump 2)svnadmin hotcopy 3)svnsync. 注意,svn备份不宜采用普通的文件拷贝方式(除非你备份的时候将库暂停),如copy命令.rsync命令. 笔者曾经用 rsync命令来做增量和全量备份,在季度备份检查审计中,发现备份出来的库大部分都不可用,因此最好是用