プログラマでありたい

おっさんになっても、プログラマでありつづけたい

Subversionのバックアップとるなら、svnsyncで決まり!!

Subversionリポジトリのバックアップ方法いろいろ
Subversionのバックアップ方法が色々紹介されています。私の中では、svnsyncで決まりです。

これはバックアップというか、ミラーリング、レプリケーションといったほうが近い。

オリジナルのリポジトリを参照して複製先のリポジトリの同期を取るためのツール。

単方向の同期なので複製先にコミット等をしてはいけない。
長所

* 最低限のデータエラーが検出できる。
* サーバがダウンしたときに代替サーバとして利用できる。

短所

* あくまで同期なので、過去にさかのぼって復元することは出来ない。
* SVNコマンドからのオペレーションミスの削除には対応出来ない。


 万が一リポジトリサーバが壊れた場合は、開発者にSVNのURLを複製先のサーバに変更してもらえば開発が止まることはありません。その間にゆっくり元のリポジトリサーバを復旧させることが出来ます。復旧後は、複製先のリポジトリからダンプを取って復元させれば差分が出る事もありません。
 短所であげられている「過去にさかのぼって復元することは出来ない」という点なのですが、初回に完全同期すれば完全な複製が出来ます。さらに言うと、複製先は1つではなく複数でも可能です。httpプロトコルで同期をとれるので、物理的に別の場所にあるサーバにも同期がとれます。BCPという意味でも有益なのではないでしょうか。
 また一番大事な点として、リアルタイムにバックアップがとれるということです。これに勝る優位性はないでしょう。もちろんサービスを止める必要はありません。一方で、SVNコマンドのオペレーションミスで消してしまったというのには対応出来ません。その対策には、svn dumpの併用が良いでしょう。


さて、svnsyncの肝心の設定方法です。


svnsyncの設定

* 要件・環境
Subversion 1.4以降
(CentOSのRPMでは、CollabNetSubversionを使う)
同期元:moto-svn
   http://moto-svn/svn/rep/
同期先:saki-svn
   http://saki-svn/svn/rep/
同期のタイミング:moto-svnのコミット時


* 同期先の設定
※同期元のSVNの設定は終わっているものとします。またsvnの認証はid,passwordで行います。

svnadmin create --fs-type=fsfs rep
svnsync init file:///var/www/svn/rep
   apacheの設定を行います。
   snnのユーザsyncを作成

   rep/hooks/pre-revprop-changeの編集

#!/bin/sh
exit 0

apacheの起動ユーザで実行出来る権限をつける事


* 同期元の設定
   rep/hooks/post-commitの編集

#!/bin/sh

/opt/CollabNet_Subversion/bin/svnsync sync
http://saki-svn/svn/rep/ --sync-username sync --sync-password sync

apacheの起動ユーザで実行出来る権限をつける事


不明な点があれば、コメント頂ければフォロー致します。


実用 Subversion 第2版
実用 Subversion 第2版
posted with amazlet at 11.04.26
C. Michael Pilato Ben Collins-Sussman Brian W. Fitzpatrick
オライリージャパン
売り上げランキング: 38631