1. 程式人生 > >在 CentOS 中 利用定時器 自動備份 SVN

在 CentOS 中 利用定時器 自動備份 SVN

相關連結:

在MyEclipse中使用SVN提交(自動忽略 .settings .project .classpath等)、檢出(無.settings .project .classpath檔案等)Maven程式碼

在MyEclipse CI 2018.9.0 中安裝 SVN 1.10.13-1.9.x

在CentOS 1804中設定Subversion(SVN)開機自啟

使用防火牆正常開啟SVN自啟後無法連線 Unable to connect to URL 'svn://.' Can't open file './format': Permission denied

在CentOS 1804 中安裝 Subversion(SVN)


  1. 建立備份檔案儲存路徑:
    建立資料夾:
    [[email protected]_0_7_centos ~]# cd ..
    [[email protected]_0_7_centos /]# mkdir data_backup
    [[email protected]_0_7_centos /]# cd data_backup/
    [[email protected]_0_7_centos data_backup]# mkdir svn_backup
    [[email protected]_0_7_centos data_backup]# mkdir svn_backup/full
    [
    [email protected]
    _0_7_centos data_backup]# mkdir svn_backup/increment [[email protected]_0_7_centos data_backup]# mkdir svn_backup/log
    檢視已建立的資料夾目錄及大小:
    [[email protected]_0_7_centos /]# du -h --max-depth=5 /data_backup/
    4.0K	/data_backup/svn_backup/full
    4.0K	/data_backup/svn_backup/increment
    4.0K	/data_backup/svn_backup/log
    24K	/data_backup/svn_backup
    28K	/data_backup/
    其中:
    /data_backup/svn_backup/full:全量備份目錄
    /data_backup/svn_backup/increment:增量備份目錄
    /data_backup/svn_backup/log:日誌
    /data_backup/svn_backup:svn備份目錄
    /data_backup/:資料備份目錄
     
  2. 查詢所需要的命令:
    svnadmin:備份時使用
    svnlook:檢視版本時使用
    [[email protected] svn_backup]# whereis svnadmin
    svnadmin: /usr/bin/svnadmin /usr/share/man/man1/svnadmin.1.gz
    [[email protected] svn_backup]# whereis svnlook
    svnlook: /usr/bin/svnlook /usr/share/man/man1/svnlook.1.gz
    
  3. 檢視版本庫的位置:
    [[email protected] svn_backup]# cat /etc/sysconfig/svnserve
    # OPTIONS is used to pass command-line arguments to svnserve.
    # 
    # Specify the repository location in -r parameter:
    OPTIONS="-r /data/svn"
    
  4. 建立全量備份執行檔案:
    /data_backup/svn_backup/svn-backup-full.sh
    [[email protected]_0_7_centos svn_backup]# vim svn-backup-full.sh
  5. 編寫全量備份執行檔案:
    #!/bin/sh
    ##Subversion的安裝目錄及執行檔案
    SVN_HOME=/usr/bin/
    SVN_ADMIN=$SVN_HOME/svnadmin
    SVN_LOOK=$SVN_HOME/svnlook
    
    ##配置庫根目錄
    SVN_REPOROOT=/data/svn
    
    ##全量備份檔案存放路徑
    date=$(date '+%Y-%m-%d_%H:%M:%S')
    RAR_STORE=/data_backup/svn_backup/full/$date
    if [ ! -d "$RAR_STORE" ];then
    mkdir -p $RAR_STORE
    fi
    
    ##讀取專案庫列表
    cd $SVN_REPOROOT
    for name in $(ls)
    do
    
    ##開始做全量備份
    $SVN_ADMIN hotcopy $SVN_REPOROOT/$name $RAR_STORE/$name
    
    done
  6. 建立增量備份執行檔案:
    /data_backup/svn_backup/svn-backup-increment.sh
    [[email protected]_0_7_centos svn_backup]# vim svn-backup-increment.sh
  7. 編寫增量備份執行檔案:
    #!/bin/sh
    #Subversion的安裝目錄及執行檔案
    SVN_HOME=/usr/bin/
    SVN_ADMIN=$SVN_HOME/svnadmin
    SVN_LOOK=$SVN_HOME/svnlook
     
    ##配置庫根目錄
    SVN_REPOROOT=/data/svn
     
    ##增量備份檔案存放路徑
    date=$(date '+%Y-%m-%d_%H:%M:%S')
    RAR_STORE=/data_backup/svn_backup/increment/$date
    # 如果增量備份的檔案存放路徑不存在,name
    if [ ! -d "$RAR_STORE" ];then
    # 建立增量備份檔案存放路徑
    mkdir -p $RAR_STORE
    # 結束if
    fi
     
    ##日誌存放目錄
    Log_PATH=/data_backup/svn_backup/log
    if [ ! -d "$Log_PATH" ];then
    mkdir -p $Log_PATH
    fi
     
    ##讀取專案庫列表
    # 進入版本庫根目錄
    cd $SVN_REPOROOT
    # 讀取目錄下的資料夾,並複製給 name
    for name in $(ls) 
    # 開始迴圈
    do
    
    	# 單個版本庫資料夾目錄是否存在
    	if [ ! -d "$RAR_STORE/$name" ];then
    	mkdir $RAR_STORE/$name
    	fi
     
    	# 進入單個版本庫資料夾目錄
    	cd $RAR_STORE/$name
    
    	# 單個版本庫日誌資料夾是否存在
    	if [ ! -d "$Log_PATH/$name" ];then
    	mkdir $Log_PATH/$name
    	fi
     
    	# 備份日誌輸出
    	echo $date 開始備份 >> $Log_PATH/$name/$name.log
    	echo SVN 版本庫 $name 開始備份 >> $Log_PATH/$name/$name.log
    	
    	# 獲得單個版本庫的版本,放入日誌資料夾找那個的臨時檔案A.TMP中
    	$SVN_LOOK youngest $SVN_REPOROOT/$name > $Log_PATH/A.TMP
    	# 取出單個版本庫的目前版本
    	UPPER=`head -1 $Log_PATH/A.TMP`
    
    	##取出上次備份後的版本號,並做+1處理
    	# 備份時讀取到last_revision.txt檔案
    	
    	# 第一次備份時讀取不到$Log_PATH/$name/last_revision.txt,預設上次備份版本為0
    	if [ ! -f "$Log_PATH/$name/last_revision.txt" ];then
    	echo 0 >> $Log_PATH/$name/last_revision.txt
            fi
    	
    	# 上次備份的版本,最低為0
    	NUM_LOWER=`head -1 $Log_PATH/$name/last_revision.txt`
    		
    	# 本次開始備份的版本,最低為1
    	let LOWER="$NUM_LOWER+1"
    
    	# > -gt	
    	if [ $LOWER -gt $UPPER ];then
            echo 本次備份的版本是 $LOWER - $UPPER , 未修改,不進行備份 >> $Log_PATH/$name/$name.log
    	echo  >> $Log_PATH/$name/$name.log        
    	rm -f $Log_PATH/A.TMP
    	fi	
    	
    	# <= -le 
    	if [ $LOWER -le $UPPER ];then
            ##開始做增量備份並記錄$UPPER,為下次備份做準備
            $SVN_ADMIN dump $SVN_REPOROOT/$name -r $LOWER:$UPPER --incremental > $RAR_STORE/$name/$LOWER-$UPPER.dump
            rm -f $Log_PATH/A.TMP
            echo $UPPER > $Log_PATH/$name/last_revision.txt
            echo 這次我們備份從 $LOWER 到 $UPPER >> $Log_PATH/$name/$name.log
            echo 備份結束 >> $Log_PATH/$name/$name.log
            echo  >> $Log_PATH/$name/$name.log
            fi
    
    # 結束迴圈
    done
  8. 檢視定時器是否開機自啟:
    [[email protected]_0_7_centos ~]# systemctl list-unit-files |grep crond
  9. 開啟定時任務開機自啟:
    [[email protected]_0_7_centos ~]# systemctl enable crond
  10. 檢視定時任務是否開啟:
    [[email protected]_0_7_centos ~]# systemctl status crond
  11. 開啟定時任務:
    [[email protected]_0_7_centos ~]# systemctl start crond

     

  12. 編輯定時任務:
    [[email protected]_0_7_centos ~]# crontab -e

     

  13. 新增定時任務:
    3 2 * * * sh /data_backup/svn_backup/svn-backup-increment.sh
    5 1 * * 0 sh /data_backup/svn_backup/svn-backup-full.sh

    每天凌晨2點3分執行增量備份
    每週日的凌晨1點5分執行全量備份

  14. 相關定時任務請檢視:
    CentOS 定時任務 crond​​​​​​​

相關連結:

在MyEclipse中使用SVN提交(自動忽略 .settings .project .classpath等)、檢出(無.settings .project .classpath檔案等)Maven程式碼

在MyEclipse CI 2018.9.0 中安裝 SVN 1.10.13-1.9.x

在CentOS 1804中設定Subversion(SVN)開機自啟

使用防火牆正常開啟SVN自啟後無法連線 Unable to connect to URL 'svn://.' Can't open file './format': Permission denied

在CentOS 1804 中安裝 Subversion(SVN)