subversionでバックアップ

バックアップの方法

  1. ファイルコピー
  2. svnadmin dump
  3. svnadmin hotcopy
  4. svnsync

どれにするか。。。


取り合えず、svnsyncほどきっちりバックアップを取る必要がないと思ったので、svnadmin dump でバックアップを取る事にした。

バックアップのシェル

svnadmin dump でバックアップして、tar で圧縮するシェルをこちらを参考に作成。

svnbackup.sh

#!/bin/sh
#
# SVNリポジトリを保存する
#
# svnadmin dump で backup し tar で 圧縮
#
#


#---------------
# 設定値
#
# *ディレクトリを指定する際は、末尾に"/"を付けること
#---------------
# svnadminコマンドへのパス
SVNADMIN_CMD='svnadmin'
# リポジトリディレクトリへの絶対パス
REPOS_DIR='/var/www/svn/'
# バックアップファイル保存先ディレクトリへの絶対パス
OUTPUT_DIR='/tmp/'
# バックアップファイル名
OUTPUT_FILENAME='svn_repos_backup_'`date '+%Y%m%d_%H%M%S'`
# 作業用一時出力ディレクトリへの絶対パス
TMP_DIR='/tmp/__svn_repos_backuper__/'


#---------------
# 処理
#---------------
echo "... start processing."

# 全リポジトリへ svnadmin load
mkdir -p $TMP_DIR$OUTPUT_FILENAME
for i in `ls $REPOS_DIR`
do
    echo "... start dumping. $REPOS_DIR$i"
    `$SVNADMIN_CMD dump $REPOS_DIR$i > $TMP_DIR$OUTPUT_FILENAME/$i'.dump'`
    echo "... complete dumping. $REPOS_DIR$i"
done

# ファイルを圧縮
echo "... start compression."
keeping_cd=`pwd`
cd $TMP_DIR
tar czf $OUTPUT_DIR$OUTPUT_FILENAME.tar.gz ./$OUTPUT_FILENAME
cd $keeping_cd
echo "... complete compression."

# 一時ファイルを削除
rm $TMP_DIR$OUTPUT_FILENAME/*.dump

echo "... complete processing."

cronに登録

crontab -e コマンドで実行ユーザのcronの設定ファイルができる。

  • u オプションでユーザを指定すればそのユーザのcronの設定ファイルができる。

crontabコマンドで /var/spool/cron/[ユーザ名] のファイルが生成される。

設定内容は毎週土曜の5時に実行するように設定。

↓毎週土曜日の5時に実行(分 時 日 月 曜日)
00 05 * * 6 /root/svnbackup.sh