Edited at

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

More than 5 years have passed since last update.


環境


  • 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