Subversionのバックアップとリストア

Subversionを使用する場合、使用したデータがバージョニングされて共有される必要があるためにSubversionを使用する訳です。つまり、それなりに重要なデータが保存されているわけですね。重要なデータと言うことはバックアップとリストアを行えることが大事でしょう。ということで、Subversionのバックアップとリストア方法をメモしておきます。

今回は D:\SVN\Test フォルダに現在使用しているリポジトリがあることとします。また、バックアップ先は F:\Backup\SVN とします。

私はDropboxを使用しているので、Dropboxにリポジトリを作成すればバックアップはいらないのではと思ったのですが、浅はかでした。なぜかというと、リポジトリ自体が壊れることもあるからです

業務としてはVSSを使用することが多く、こちらは壊れること前提で運用していたためバックアップには注意しましたが、Subversionでも壊れることは当然あるわけですね。

したがって、リポジトリを保存する場所が分散されたとしても、リポジトリ自体が壊れた場合にはどうにもなりません。ここは注意した方が良いでしょう。

ということで、バックアップの取得方法ですが先日のエントリーに記載したリポジトリの同期ではなく、バックアップファイルを作成する方法をとりたいと思います。

なお、バックアップはあくまで個人で使用するレベルを想定しています。せいぜい数百MB程度のリポジトリでしょう。なので、基本的に差分バックアップなどは行わずフルバックアップを行うようにします。フルバックアップで時間的な制約やリカバリの制約が発生するならば、もう少しSubversionの運用を検討した方が良いでしょう。

ではバックアップから。バックアップにはMySQLのdumpとそっくりな svnadmin dump をコマンドプロンプトから実行します。(MySQLのdumpもsvnadmin dumpも可読性の高いファイルとして出力されます。)

   1: svnadmin dump D:\SVN\Test > F:\Backup\SVN\Test.dump
svnadmin dump で作成されるdumpファイルは単一のファイルになりますが、リビジョンが大きくなるとリポジトリよりファイルサイズが大きくなるとのことなので注意が必要です。

ここまではきちんとバッチを作成して行うのですが、肝心なのは次のリストアです。取得したdumpファイルから現状が復元できなければ全く意味がありません。

バックアップからのリストアには svnadmin load を使用します。dumpとloadは1対の仕組みのようなものですね。

リストアを行う場合、リストアするdumpファイルを取り込むリポジトリを作成する必要があります。今回は D:\SVN\RestoreTest フォルダにリポジトリを作成することとします。

次にリポジトリのリストアです。svnadmin load をコマンドプロンプトから実行します。

   1: svnadmin load D:\SVN\RestoreTest < F:\Backup\SVN\Test.dump
 
dumpファイル内のリビジョンごとのデータがリポジトリに取り込まれていきます。イメージ的にはまさにリポジトリ内にリビジョンごとにデータを復元しているようになりますね。
あとはTortoiseSVNなどでリポジトリを確認して正常にデータを取得できればOKです。くれぐれも、リストア手順の確認を忘れないようにしましょう
なお、Subversionのバックアップ方法については、こちらのサイトを参考にさせていただきました。