2010年10月21日木曜日

ストレージサーバ - その9 - SVNデータの自動バックアップ

バージョン管理サーバのデータを週一回直接バックアップするには以下を実行します。

$ su -
# cd /etc/cron.weekly
# touch svn_backup
# chown root:root svn_backup
# chmod 755 svn_backup

作成したファイル"/etc/cron.weekly/svn_backup"の内容を以下のようにします。

#!/bin/sh
/etc/init.d/apache2 stop
cd /mnt/storage/svn

rep=<リポジトリAの名前>
tarball=<作成するバックアップファイルのフルパス>
tar zcf $tarball $rep
chown apache:apache $tarball

rep=<リポジトリBの名前>
tarball=<作成するバックアップファイルのフルパス>
tar zcf $tarball $rep
chown apache:apache $tarball

/etc/init.d/apache2 start

バックアップしたい複数のリポジトリについて上のように羅列すればよいです。
多くの場合、バックアップファイルはネットワーク共有できる場所におき、
名前には日付をつけたいので、上の"tarball"変数は以下のようにするとよいでしょう。

tarball=/mnt/storage/dav/<共有スペース名>/svn/$rep/svn-$rep-`date "+%Y%m%d%H%M%S"`.tar.gz

ちなみに、特定のリポジトリ(例:"sandbox")をいったん削除し、
バックアップファイル(例:"svn-sandbox-20080101050000.tar.gz")から
復元するには以下を実行します。

$ su-
# /etc/init.d/apache2 stop
# cd /mnt/storage/svn
# rm -rf sandbox
# tar zxf svn-sandbox-20080101050000.tar.gz
# /etc/init.d/apache2 start

ところで直接バックアップする代わりに
SVNのダンプデータをバックアップすることもできます。
バージョン管理サーバのダンプデータデータを週一回バックアップするには以下を実行します。

$ su -
# cd /etc/cron.weekly
# touch svn_dump
# chown root:root svn_dump
# chmod 755 svn_dump

作成したファイル"/etc/cron.weekly/svn_dump"の内容を以下のようにします。

#!/bin/sh

# global common
reppath=/mnt/storage/svn
timestamp=`date "+%Y%m%d%H%M%S"`
svndump () {
dumpball=$dumppath/$rep/svn-$rep-$timestamp.bz2
svnadmin dump $reppath/$rep | bzip2 -z > $dumpball
chown apache:apache $dumpball
}

# local common
dumppath=/mnt/storage/dav/project2/applications/svn

# repository project2_application1
rep=project2_application1
svndump

# repository project2_application2
rep=project2_application2
svndump

バックアップしたい複数のリポジトリについて

rep=<リポジトリ名>
svndump

を羅列すればよいです。
バックアップファイルにはその名前に自動的に日付が付加されます。
バックアップファイルはネットワーク共有できる場所(dumppath変数で調整)におき、
リポジトリの位置はreppath変数で調整できます。
ちなみに、特定のリポジトリ(例:"sandbox")をいったん削除し、
バックアップファイル(例:"svn-sandbox-20080101050000.tar.gz")から
復元するには以下を実行します。

$ su-
# cd /mnt/storage/svn
# rm -rf sandbox
# svnadmin create /mnt/storage/svn/sandbox
# chown -R apache:apache sandbox
# bzcat svn-sandbox-20080101050000.bz2 | svnadmin load /mnt/storage/svn/sandbox

なお、一週間のうちのいつ行われるかは"/etc/crontab"の設定によるので、
日曜日の早朝4:15に行いたいのであれば

15 4 * * 0 root rm -f /var/spool/cron/lastrun/cron.weekly

のようにしておく必要があります。

0 件のコメント:

コメントを投稿