LoginSignup
2
1

More than 5 years have passed since last update.

svn-hot-backupを使ったSubversionリポジトリの複数世代のフルバックアップ検証メモ

Last updated at Posted at 2013-05-29

環境

  • CentOS 5.9 Final
  • Subversion 1.6.11-11.el5_9
  • Python 2.4.3

概要

svn-hot-backupを使ったSubversionリポジトリの複数世代のフルバックアップ。
cronを用いる。

環境導入

ただし、OSはセットアップ済みとする。

subversionのインストール
yum install subversion.x86_64
リポジトリの作成
mkdir -p /data/repository
cd /data/repository
svnadmin create projectA --fs-type fsfs
svnadmin create projectB --fs-type fsfs
バックアップディレクトリの作成
mkdir -p /backup/repository
検証用のコミットをcron仕込み
mkdir -p /data/checkout/
cd /data/checkout
svn checkout file:///data/repository/projectA
svn checkout file:///data/repository/projectB
auto_commit.sh
#!/bin/sh
FILE=`date +"%Y%m%d%H%M%S"`

cd /data/checkout/projectA
touch $FILE
svn add $FILE
svn commit -m "$FILE commit."

cd /data/checkout/projectB
touch $FILE
svn add $FILE
svn commit -m "$FILE commit."
svn_backup.sh
#!/bin/sh

REPO_DIR=/data/repository
BAK_DIR=/backup/repository
HOT_BACKUP=/usr/share/doc/subversion-1.6.11/tools/backup/hot-backup.py 

EXIT_STATUS=0
# 保存世代数
export SVN_HOTBACKUP_BACKUPS_NUMBER=7

for REPO in `find $REPO_DIR -maxdepth 1 -mindepth 1 -type d`
do  
  $HOT_BACKUP --archive-type=gz $REPO $BAK_DIR
  if [ $? = 0 ]; then
    logger "SVN Backup done. repository:$REPO, $BKFILE"
    echo "SVN Backup OK $BKFILE"
  else 
    logger "SVN Backup NG $BKFILE"
    echo "SVN Backup NG $BKFILE"
    EXIT_STATUS=1
  fi  
done

exit $EXIT_STATUS
コミットとバックアップの定期実行
# テストなんで実行ペースは早くしてます。
crontab -e

* * * * * /data/script/incremental_commit.sh 1>/dev/null
*/5 * * * * /data/script/svn_backup.sh 1>/dev/null

実行経過

svn_backup.shの出力例
Beginning hot backup of '/data/repository/projectB'.
Youngest revision is 1
Backing up repository to '/backup/repository/projectB-1'...
Done.
Archiving backup to '/backup/repository/projectB-1.tar.gz'...
Archive created, removing backup '/backup/repository/projectB-1'...
SVN Backup OK 
Beginning hot backup of '/data/repository/projectA'.
Youngest revision is 1
Backing up repository to '/backup/repository/projectA-1'...
Done.
Archiving backup to '/backup/repository/projectA-1.tar.gz'...
Archive created, removing backup '/backup/repository/projectA-1'...
SVN Backup OK 
出力ファイル
[root@localhost repository]# ll
total 6336
-rw-r--r-- 1 root root  288771 May 29 15:45 projectA-520.tar.gz
-rw-r--r-- 1 root root  293589 May 29 15:50 projectA-524.tar.gz
-rw-r--r-- 1 root root  301862 May 29 15:55 projectA-529.tar.gz
-rw-r--r-- 1 root root  308573 May 29 16:00 projectA-534.tar.gz
-rw-r--r-- 1 root root  315250 May 29 16:05 projectA-540.tar.gz
-rw-r--r-- 1 root root  318863 May 29 16:10 projectA-544.tar.gz
-rw-r--r-- 1 root root  330825 May 29 16:15 projectA-550.tar.gz
-rw-r--r-- 1 root root  294565 May 29 15:45 projectB-527.tar.gz
-rw-r--r-- 1 root root  303877 May 29 15:50 projectB-532.tar.gz
-rw-r--r-- 1 root root  308243 May 29 15:55 projectB-537.tar.gz
-rw-r--r-- 1 root root  313657 May 29 16:00 projectB-542.tar.gz
-rw-r--r-- 1 root root  323662 May 29 16:05 projectB-548.tar.gz
-rw-r--r-- 1 root root  330473 May 29 16:10 projectB-553.tar.gz
-rw-r--r-- 1 root root  338349 May 29 16:15 projectB-558.tar.gz
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1