何が正解? Subversion のバックアップ

No Photo

イメージ

こんにちは、nakamura です。いやぁ今年もついにやってまいりました。何がって?決まってるじゃないですか!花粉ですよ花粉!もうズビズビですよ!

Subversion でソースコード管理をしている会社は多いと思いますが、みなさんリポジトリのバックアップはどうされているでしょう?調べてみると方法はいくつかあり、状況に応じて使い分けるのが良さそうです。今日はそんな Subversion リポジトリのバックアップ方法をいくつかご紹介します。

単純にファイルをコピー

元々シーブレインではこの方法でバックアップを行っていました。 rsync を使って別のサーバにリポジトリを丸ごと同期するのですが、あくまで単純にコピーしているだけなので、例えば実際に不具合が発生した時にバックアップデータがそのまま使えるのかは全く保証されていませんでした。かなり手っ取り早くて楽な方法でしたが Berkley DB や Subversion 自体のバージョンに左右される所が大きく、どうしても可搬性の面で乏しいと言わざるを得ないでしょう。オススメはしませんが、やらないよりはマシ、と言った程度のバックアップ方法です。

svnsync

これも一時期使っていたバックアップ方法です。バックアップというよりは MySQL でいうレプリケーションに近いイメージでしょうか。状況によってはとても有用なバックアップ方法となるでしょう。svnsync を使った方が良いと思われる条件は以下の 2 点が考えられます。

  1. バックアップ先にリポジトリを用意して、そのリポジトリにバックアップ元からアクセスが可能である
  2. バックアップ元に不具合が起きた際にはそのままバックアップ先のリポジトリを利用する予定である

特に 2 番目が微妙な所でしょうか。結局バックアップ先をそのまま使わないのであれば、後述する方法で新しいリポジトリへの移行作業が発生してしまい二度手間になります。ともあれ、リポジトリの可搬性は保たれますし、ファイルをコピーするだけよりは断然オススメな方法です。post-commit でコミットの度に実行してもいいですし、一日に一回バッチ処理で走らせてもいけます。

svnadmin dump/load

こちらもまた、MySQL のダンプバックアップに近いイメージです。ファイルシステムやバージョン間の可搬性も保たれますが、規模の大きなリポジトリになると若干時間が掛かります。

以下は簡単な使用例です。

svnadmin dump REPOSPATH > DUMPFILE

リビジョンを指定する場合は -r オプションを使用します。

svnadmin dump REPOSPATH -r15:50 > DUMPFILE

また、--incremental や --deltas というオプションを使うことで差分バックアップも可能です。

svnadmin dump REPOSPATH --incremental --deltas > DUMPFILE

ダンプファイルから復元するには svnadmin load を使います。

svnadmin load REPOSPATH < DUMPFILE

svn-backup-dumps.py

現在シーブレインで使用しているバックアップ方法です。svn-backup-dumps.py は Python で書かれた svnadmin dump コマンドのラッパープログラムで、svnadmin dump で出来なかった細かい部分を補ってくれる便利なやつです。まずは Subversion の公式リポジトリからスクリプトをダウンロードしてください。ちなみに Subversion をソースからコンパイルした場合はソースコードに含まれています。

簡単な使い方は以下の通り。

単純なフルバックアップ。-z オプションで gzip 形式で圧縮してくれます。( -b だと bzip 形式になります)

svn-backup-dumps.py -z REPOSPATH DUMPDIR

最新リビジョンから 50 個前までのリビジョンをバックアップ。

svn-backup-dumps.py -c 50 -z REPOSPATH DUMPDIR

最後のバックアップからの増分のみをバックアップ。

svn-backup-dumps.py -i -z REPOSPATH DUMPDIR

現在シーブレインでは一日に一回の差分バックアップと週に一回のフルバックアップを走らせています。こうする事でダンプファイル自体に破損があった場合も同じリビジョンに対するダンプファイルが必ず 2 つ存在する事になるので安心です。

終わりに

状況によってベストなバックアップ方法は異なると思います。お使いの環境にあわせてぜひベストな方法を見つけてください。

  • このエントリーをはてなブックマークに追加

この記事を読んだ人にオススメ