svnリポジトリダンプスクリプト ― 2012年02月11日 08時21分53秒
KURO-BOX/Debian Lenny環境でSubversionリポジトリを管理するようにしています。 自動でsvnadmin dumpを使ったリポジトリバックアップ運用も既に行っていたのですが、1週間に一度単純なdumpを日付のフォルダを作って保存する形でした。
でもその形だと以下の問題があります。
- 更新がなかったリポジトリも毎回バックアップしてしまう
- 途中でリポジトリが壊れた場合差分loadで復元したい
ということで以下の機能を追加
- バックアップ時点のリポジトリのレビジョンを保管
- 保管したレビジョンとその時点のレビジョンに差分がある場合のみバックアップ実行
- 差分がある場合はフルバックアップと差分バックアップの両方を実施
念のためですが「自動」の部分はcronで実施で、ここで紹介するのは単なるスクリプトです。
なお、バックアップ元のディレクトリと保存先のディレクトリはスクリプト内で指定する形。引数(第一引数)で指定するのはリポジトリの名前(相対パス)。 オプション(第二引数)で更に他のディレクトリに最新のバックアップをコピーします。
#!/bin/sh ########################################## # svn repository dump ########################################## # setting path rtop="/mnt/svn" svnbackupdir="/mnt/backup/svndump" # if [ "$1" = "" ]; then echo "Usage $0 repository-name" exit fi repo=$rtop"/"$1 if [ ! -d $repo ]; then echo "$repo not found" exit fi echo "## $repo dump start ##" logger "## $repo dump start ##" datedir=`date +%F` echo "today is" $datedir if [ -d $svnbackupdir ]; then echo "already exist" $svnbackupdir else echo "mkdir" $svnbackupdir mkdir $svnbackupdir fi backupdatedir="$svnbackupdir/$datedir" backupbase=`echo $1 | tr "/" "_"` # history save hisfile="$svnbackupdir/svn_$backupbase.history" newrev=`svnlook youngest $repo` echo "$repo revision is $newrev" backupfile="$backupdatedir/svn_$backupbase.dump" if [ -f $hisfile ]; then lastbackup=`cat $hisfile` echo "$repo last dump revision is $lastbackup" if [ "$lastbackup" = "$newrev" ]; then msg="## $repo no change ##" echo $msg logger "$msg" exit fi fi # backup dir create if [ -d $backupdatedir ]; then echo "already exist" $backupdatedir else echo "mkdir" $backupdatedir mkdir $backupdatedir fi # svndump diff if [ -f $hisfile ]; then lowrev=`expr $lastbackup + 1` difffile="$backupfile""_""$lowrev""_""$newrev" echo "difffile = $difffile" msg="svn dump $repo -r $lowrev:$newrev --incremental --> $difffile" echo $msg svnadmin dump $repo -r $lowrev:$newrev --incremental > $difffile logger "$msg" fi # svndump all msg="svn dump $repo --> $backupfile" echo $msg svnadmin dump $repo > $backupfile logger "$msg" # dump history save echo $newrev > $hisfile # copy svndump file if [ "$2" != "" ]; then cpdir="$2/$datedir" if [ -d $cpdir ]; then echo "already exist" $cpdir else echo "mkdir" $cpdir mkdir $cpdir fi echo "svn dump copy $backupfile --> $cpdir" cp -p $backupfile $cpdir cp -p $difffile $cpdir fi msg="## $repo dump end ##" echo $msg logger "$msg"
コメント
トラックバック
このエントリのトラックバックURL: http://kumikomi.asablo.jp/blog/2012/02/11/6330062/tb
※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。
コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※なお、送られたコメントはブログの管理者が確認するまで公開されません。
※投稿には管理者が設定した質問に答える必要があります。