linux下SVN定時備份並刪除歷史備份

利用svnadmin hotcopy可以實現完全備份,但不能進行增量備份。svnadmin hotcopy是將整個庫都“熱”拷貝一份出來,包括庫的鉤子腳本、配置文件等;任何時候運行這個腳本都得到一個版本庫的安全拷貝,不管是否有其他進程正在使用版本庫。

優點是:備份過程較快,災難恢復也很快;如果備份機上已經搭建了svn服務,甚至不需要恢復,只需要進行簡單配置即可切換到備份庫上工作。

缺點是:比較耗費硬盤,需要有較大的硬盤支持。
在/data/svnbackup目錄建立備份腳本svnbak.sh,假如svn倉庫路徑爲/home,要備份到/data/svnbackup/

#!/bin/bash
#
# Filename:    svnbak.sh
# Revision:    1.0
# Date:        2019/02/21
# Author:      Scott
# Email:         [email protected]
# Description: SVN完全備份
# Notes:       將腳本加入crontab中,每天定時執行
MAXDAYS=7                       # 備份保留最大天數
##Subversion的安裝目錄及執行文件
SVN_HOME=/usr/bin
SVN_ADMIN=$SVN_HOME/svnadmin
SVN_LOOK=$SVN_HOME/svnlook
##配置庫根目錄
SVN_REPOROOT=/home
##增量備份文件存放路徑
BAKDIR=/data/svnbackup
date=$(date '+%Y%m%d%H%M%S')
RAR_STORE=$BAKDIR/$date
BAKLOG=${BAKDIR}/$date.log    # 定義備份日誌
if [ ! -d "$RAR_STORE" ];then
mkdir -p $RAR_STORE
exec 1>$BAKLOG
exec 2>&1 
set -x
fi
# 刪除歷史備份
$find $BAKDIR/ -type f -mtime +$(expr $MAXDAYS - 1) -exec rm -f {} \;
##讀取項目庫列表
cd $SVN_REPOROOT
for name in $(ls)
do
##開始做全量備份
$SVN_ADMIN hotcopy $SVN_REPOROOT/$name $RAR_STORE/$name
$SVN_LOOK youngest $RAR_STORE/$name
done
cd $BAKDIR
# 壓縮備份
tar cvzf $date.tar.gz $date/
rm -rf $date

設置定時crontab 每天23點59分開始執行腳本:

yum install crontabs -y
vi /etc/crontab
59 23 * * * /bin/bash /data/svnbackup/svnbak.sh
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章