jasmine214--love

          只有當你的內心總是充滿快樂、美好的愿望和寧靜時,你才能擁有強壯的體魄和明朗、快樂或者寧靜的面容。
          posts - 731, comments - 60, trackbacks - 0, articles - 0

          svn dump 全自動備份腳本

          Posted on 2010-09-26 11:24 幻海藍夢 閱讀(2025) 評論(1)  編輯  收藏 所屬分類: Linux版本管理

          原文:http://carywu.blog.51cto.com/13185/207571
          最近要給美國的SVN服務器做升級,由于這臺服務器有一定年份了,在本公司也算是個三朝元老,保存了多少code啊!。為了保險起見,老板將遷移的工作鄭重的交到我的手上。在欣欣然的同時也顫抖著。
          不過還好我已經對其輕車熟路,在新的服務器上安裝好apache和subversion軟件后,開始著手備份與遷移了。
          由于舊服務器版本太低,沒有svnsync的功能,考慮再三,我選擇使用了svnadmin dump去做備份。
          可是有一個問題了,每個庫的版本都有幾萬了,然后服務器上有十幾個庫,我可沒耐心一個個輸入svnadmin dump去備份它們,那會讓我覺得長夜漫漫,難于睡眠!
          管理員的最高境界就是花力氣去懶惰,我很向往這個境界。所以,我花了些時間寫了個shell,就讓系統自己去干這些事情吧!

          shell功能:
          只需要大家修改源庫所在的目錄,和備份存放的目錄就可以了。
          第一次運行會全部備份,然后以后每次運行會增量備份。
          所以,恢復的時候,先恢復全部備份,然后依次按照日期恢復增量備份即可。

          #!/bin/sh

          #########################################################
          # this script is used for svn repository backup
          # written: carywu
          # date: 2008/11/21
          #########################################################

          ###################################
          # mail address for status updates
          #  - This is used to email you a status report
          ###################################
          MAILADDR=carywu@yahoo.cn

          ###################################
          # backup directory,please change it
          # - This is the path to the backup directory
          ###################################
          BACKUPDIR=/svnroot/svnback

          ###################################
          # svn repository directory, please change it.
          # - This is the path to the directory you want to archive
          ###################################
          SVNDIR=/svnroot/repository

          ###################################
          # HOSTNAME and project list
          #  - This is also used for reporting
          ###################################
          ProjectLst=$BACKUPDIR/projectlist.txt

          ###################################
          # svn backup log path and date
          #  - This is used to log result
          ###################################
          LogFile=$BACKUPDIR/svnback.log
          DATE=`date +%Y%m%d-%T`
          ###################################
          # svn command path
          # - This is the path to the directory you want to archive
          ###################################
          export PATH=$PATH:/bin:/usr/bin:/usr/local/bin

          # our actual rsyncing function
          do_accounting()
          {
                  echo " " >> $LogFile
                  echo " " >> $LogFile
                  echo "###########################" >> $LogFile
                  echo "$DATE" >> $LogFile
                  echo "###########################" >> $LogFile
                  cd $BackDir
          }

          do_svndump()
          {
             PROJECTLIST=`cat $ProjectLst`
             cd $SVNDIR
             for project in $PROJECTLIST
                    do
                    echo "begin to dump $project databases" >> $LogFile
                          if [ ! -f $BACKUPDIR/$project.dump ]
                          then
                          YOUNGEST=`svnlook youngest $project`
                          svnadmin dump $project > $BACKUPDIR/$project.dump
                          echo "OK,dump file successfully!!"
                          echo "$YOUNGEST" > $BACKUPDIR/$project.youngest
                          else
                                  echo "$project.dump existed,will do increatment job" >> $LogFile
                                  if [ ! -f $BACKUPDIR/$project.youngest ]
                                  then
                                  echo "error, no youngest check!" >> $LogFile
                                  else
                                          PREVYOUNGEST=`cat $BACKUPDIR/$project.youngest`
                                          NEWYOUNGEST=`svnlook youngest $project`
                                          if [ $PREVYOUNGEST -eq $NEWYOUNGEST ]
                                          then
                                                  echo " no database updated!" >> $LogFile
                                          else
                                                  LASTYOUNGEST=`expr $PREVYOUNGEST + 1`
                                                  echo "last youngest is $LASTYOUNGEST" >> $LogFile
                                                  svnadmin dump $project --revision $LASTYOUNGEST:$NEWYOUNGEST --incremental > $BACKUPDIR/$project-$LASTYOUNGET-$NEWYOUNGEST.$DATE
                                                  echo "$NEWYOUNGEST" > $BACKUPDIR/$project.youngest
                                          fi
                                  fi
            fi
                  done
          }

          # our post rsync accounting function
          do_mail()
          {
             mail $MAILADDR -s svn-back_log < $LogFile
          }
          # some error handling and/or run our backup and accounting
          do_accounting && do_svndump && do_mail


          Feedback

          # re: svn dump 全自動備份腳本  回復  更多評論   

          2013-07-03 10:12 by
          這是同一臺服務器備份嗎
          主站蜘蛛池模板: 永寿县| 高阳县| 嵊泗县| 镶黄旗| 通江县| 山东省| 福贡县| 明星| 秭归县| 祁连县| 睢宁县| 蓝田县| 南投市| 方城县| 武穴市| 茌平县| 东乡县| 泰宁县| 桦川县| 吐鲁番市| 京山县| 穆棱市| 马公市| 理塘县| 喀喇沁旗| 昌江| 潍坊市| 宜黄县| 龙陵县| 黎城县| 隆回县| 南投县| 阆中市| 霍城县| 开化县| 滨海县| 广丰县| 武汉市| 会东县| 宜良县| 石棉县|