Subversionリポジトリのバックアップツール「svn-backup-dumps.py」

Subversionリポジトリのバックアップツール「svn-backup-dumps.py」

これまでに体験したことはないんですが、svndumpでバックアップ(フルバックアップ)したファイルが破損することがある・・・とのこと。
これは、「svndump load」実行時に動くチェッカがエラーを検出した場合、そのダンプファイルは利用できない・・・というハメになるそうです。
繰り返しますが、私は経験したことはありません。

が、想定はしておいた方が良さそうなので、「svn-backup-dumps.py」というツールを利用してみました。

【「svn-backup-dumps.py」とは】

「svn-backup-dumps.py」は、svnadmin dumpをラップして、容易にバックアップ、インクリメンタルバックアップを実現できるようにしたツールのこと
このスクリプトは、渡された引数をsvnadmin dumpへ渡して呼び出すだけのツールです
pythonで書かれていますが、python buildingなどの必要はないようです

【入手】

Subversionのリポジトリから直接入手します

$ cd /usr/local/sbin
$ svn export http://svn.apache.org/repos/asf/subversion/trunk/tools/server-side/svn-backup-dumps.py

【利用方法】

ヘルプにも記載がありますので、転記します

$ svn-backup-dumps.py –help
usage: svn-backup-dumps.py [options] repospath dumpdir

options:
–version show program’s version number and exit
-h, –help show this help message and exit
-b compress the dump using python bzip2 library.
-i perform incremental relative to last dump.
–deltas pass –deltas to svnadmin dump.
-c CNT count of revisions per dumpfile.
-o overwrite files.
-O overwrite all files.
-q quiet.
-r REV revision number for single rev dump.
-t TRANSFER transfer dumps to another machine (s.a. –help-
transfer).
-z compress the dump using python gzip library.
–bzip2-path=BZIP2_PATH
compress the dump using bzip2 custom command.
–gzip-path=GZIP_PATH
compress the dump using gzip custom command.
–svnadmin-path=SVNADMIN_PATH
svnadmin command path.
–svnlook-path=SVNLOOK_PATH
svnlook command path.
–help-transfer shows detailed help for the transfer option.

【フルバックアップ】

フルバックアップは、以下のコマンドで実行できます

$ svn-backup-dumps.py /some/where/repos /some/where/backup
writing /some/where/backup/repos.000000-000709.svndmp
* リビジョン 0 をダンプしました。
* リビジョン 1 をダンプしました。
* リビジョン 2 をダンプしました。
* リビジョン 3 をダンプしました。

* リビジョン 709 をダンプしました。

Everything OK.

【リビジョン指定のバックアップ】

リビジョンを指定したバックアップが可能です

$ svn-backup-dumps.py -r 105 /some/where/repos /some/where/backup

【複数リビジョンの差分バックアップ】

一定時間ごとに、cronなどで実行することを想定したバックアップ方法です
実行された時間ごとに、更新された分の差分バックアップを取ることが出来ます
おそらくこれが最も主流な利用方法になると思います

$ svn-backup-dumps.py -c 50 /some/where/repos /some/where/backup
$ ls -1 /some/where/backup
repos.000000-000049.svndmp
repos.000000-000709.svndmp
repos.000050-000099.svndmp
repos.000100-000149.svndmp
repos.000150-000199.svndmp
repos.000200-000249.svndmp
repos.000250-000299.svndmp
repos.000300-000349.svndmp
repos.000350-000399.svndmp
repos.000400-000449.svndmp
repos.000450-000499.svndmp
repos.000500-000549.svndmp
repos.000550-000599.svndmp
repos.000600-000649.svndmp
repos.000650-000699.svndmp
repos.000700-000709.svndmp

50リビジョンごとにバックアップされます
また、指定リビジョンに満たない場合もバックアップされます

ここで、リビジョンを1つ上げてから再度同じコマンドを実行します
すると・・・

$ svn-backup-dumps.py -c 50 /some/where/repos /some/where/backup
$ ls -1 /some/where/backup
repos.000000-000049.svndmp
repos.000000-000709.svndmp
repos.000050-000099.svndmp
repos.000100-000149.svndmp
repos.000150-000199.svndmp
repos.000200-000249.svndmp
repos.000250-000299.svndmp
repos.000300-000349.svndmp
repos.000350-000399.svndmp
repos.000400-000449.svndmp
repos.000450-000499.svndmp
repos.000500-000549.svndmp
repos.000550-000599.svndmp
repos.000600-000649.svndmp
repos.000650-000699.svndmp
repos.000700-000709.svndmp ← 古いリビジョンはそのまま残ります
repos.000700-000710.svndmp ← 新しいリビジョンのバックアップが作成されます

【参考】

ref. Subversionリポジトリのバックアップ [svn-backup-dumps.py の利用方法]