svnのバックアップ

今までSVNのバックアップを全然やってなかったことに気付いたので定期的にフルバックアップするようにしておきます。

フルバックアップするには

svnadmin dump リポジトリディレクトリ > 出力先

とやるらしい。
他にも

  • リポジトリのファイルを丸ごとコピーしておくだけの方法
  • svnsync
  • svnadmin hotcopy
  • hot-backup.py(svn-hot-backup)
  • svn-fast-backup
  • svn-backup-dumps.py(svn-backup-dumps)

方法はいくつかあるみたいですが、

  • フルバックアップの一番の正攻法っぽい感じがする
  • pre-commit/post-commitとか使ってないからバックアップ不要

という理由でこの方法にしておきます。

参考サイト :
Subversionリポジトリのバックアップ
Subversionリポジトリのバックアップ方法いろいろ - ぱせらんメモ
Linux015:Subversionの差分/フルバックアップ - 74th Street

定期的にバックアップするためにシェルをつくっておきました。

#!/bin/bash

REPOS_DIR=/var/storage/00/main/svn/repos/
BACKUP_DIR='/var/storage/00/main/data/03_バックアップ/svn/'

# log directory
log_dir="/var/log/svndumpall"
if [ ! -d $log_dir ]
then
mkdir $log_dir
fi

# log file path
log_file=$log_dir"/"`date +%Y%m%d%H%M`".log"

# start
echo "### Start svn dump all ##########" >> $log_file
date >> $log_file

cd $BACKUP_DIR

# list repos
REPOS=`ls $REPOS_DIR`

echo "### target repos $REPOS" >> $log_file

for repo_name in $REPOS;
do
dump_file=$repo_name.`date +"%Y%m%d%H%M"`.svn.dump
svnadmin dump $REPOS_DIR$repo_name > $dump_file
tar zcvf $dump_file.tar.gz $dump_file >> $log_file
rm -f $dump_file >> $log_file
done

# end
echo "### End svn dump all ############" >> $log_file
date >> $log_file

exit 0

  1. ログディレクトリ・ファイル作成
  2. バックアップディレクトリにcd (tarのパラメータでカレントを指定するため)
  3. リポジトリ用の親ディレクトリからlsでリポジトリディレクトリを取得
  4. svnadmin dump コマンドでダンプファイルを作成
  5. ダンプファイルをtar.gzで圧縮
  6. ダンプファイルを削除

とやってます。
svnadminの処理中のメッセージはログファイルにだしてません。
色々やってもプロンプトに表示されてしまってやりかたがわからないからです。
こだわりがないのでこれでいいです。

あとはこれをcronで週一の処理として設定しておきます。

crontab -e

0 12 * * 2 /root/svndumpall.sh

これで毎週火曜日の昼の12時にダンプされていきます。

なお、どんどん溜まっていく過去分は気が向いた時に手動で削除します。

コメント