私は SVN を初めて使用し、Windows 環境でリポジトリをバックアップするためにどのような方法が利用できるか知りたいですか?
19 に答える
(Linux)のようなものを使用できます:
svnadmin dump repositorypath | gzip > backupname.svn.gz
Windows は GZip をサポートしていないため、次のようになります。
svnadmin dump repositorypath > backupname.svn
svnadmin hotcopy を使用します。例:
svnadmin hotcopy C:\svn\repo D:\backups\svn\repo
本によると:
他のプロセスがリポジトリを使用しているかどうかに関係なく、いつでもこのコマンドを実行して、リポジトリの安全なコピーを作成できます。
もちろん、バックアップ コピーを ZIP (できれば 7-Zip) することもできます。IMHO これは最も簡単なバックアップ オプションです。災害が発生した場合、解凍して元の位置に戻す以外に行うことはほとんどありません。
Subversion の Web サイトには、バックアップの自動化に非常に便利な hotbackup.py スクリプトがあります。
http://svn.apache.org/repos/asf/subversion/trunk/tools/backup/hot-backup.py.in
以下は、次のような Perl スクリプトです。
- レポをバックアップする
- SCP経由で別のサーバーにコピーします
- バックアップを取得する
- バックアップからテスト リポジトリを作成する
- テストチェックアウトを行う
- エラーがあればメールで送信 (cron 経由)
スクリプト:
my $svn_repo = "/var/svn";
my $bkup_dir = "/home/backup_user/backups";
my $bkup_file = "my_backup-";
my $tmp_dir = "/home/backup_user/tmp";
my $bkup_svr = "my.backup.com";
my $bkup_svr_login = "backup";
$bkup_file = $bkup_file . `date +%Y%m%d-%H%M`;
chomp $bkup_file;
my $youngest = `svnlook youngest $svn_repo`;
chomp $youngest;
my $dump_command = "svnadmin -q dump $svn_repo > $bkup_dir/$bkup_file ";
print "\nDumping Subversion repo $svn_repo to $bkup_file...\n";
print `$dump_command`;
print "Backing up through revision $youngest... \n";
print "\nCompressing dump file...\n";
print `gzip -9 $bkup_dir/$bkup_file\n`;
chomp $bkup_file;
my $zipped_file = $bkup_dir . "/" . $bkup_file . ".gz";
print "\nCreated $zipped_file\n";
print `scp $zipped_file $bkup_svr_login\@$bkup_svr:/home/backup/`;
print "\n$bkup_file.gz transfered to $bkup_svr\n";
#Test Backup
print "\n---------------------------------------\n";
print "Testing Backup";
print "\n---------------------------------------\n";
print "Downloading $bkup_file.gz from $bkup_svr\n";
print `scp $bkup_svr_login\@$bkup_svr:/home/backup/$bkup_file.gz $tmp_dir/`;
print "Unzipping $bkup_file.gz\n";
print `gunzip $tmp_dir/$bkup_file.gz`;
print "Creating test repository\n";
print `svnadmin create $tmp_dir/test_repo`;
print "Loading repository\n";
print `svnadmin -q load $tmp_dir/test_repo < $tmp_dir/$bkup_file`;
print "Checking out repository\n";
print `svn -q co file://$tmp_dir/test_repo $tmp_dir/test_checkout`;
print "Cleaning up\n";
print `rm -f $tmp_dir/$bkup_file`;
print `rm -rf $tmp_dir/test_checkout`;
print `rm -rf $tmp_dir/test_repo`;
リモートサーバーをミラー/スレーブとしてセットアップするsvnsyncを使用します。2 週間前にサーバーがダウンしましたが、スレーブをプライマリ ポジションに簡単に切り替えることができました (スレーブ リポジトリの UUID を元の状態にリセットするだけで済みました)。
もう 1 つの利点は、いずれかのサーバーでタスクとしてではなく、仲介者が同期を実行できることです。2 つの VPN へのクライアントで、それらの間でリポジトリを同期させました。
svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH
このサブコマンドは、すべてのフック、構成ファイル、そしてもちろんデータベース ファイルを含む、リポジトリの完全な「ホット」バックアップを作成します。
.NET コンソール アプリケーションである Google Code でsvnbackupを実行します。
でリポジトリのバックアップ (ダンプ) を作成できます
svnadmin dump
。その後、 を使用してインポートできます
svnadmin load
。
SVNBook の詳細なリファレンス: 「svnadmin を使用したリポジトリ データの移行」
基本的にはsvnサーバーが停止していればリポジトリフォルダをコピーしても安全です。(ソース: https://groups.google.com/forum/?fromgroups#!topic/visualsvn/i_55khUBrys%5B1-25%5D )
したがって、サーバーを停止することが許可されている場合は、それを実行して、スクリプトまたはバックアップ ツールを使用してリポジトリをコピーするだけです。Cobian Backup は、サービスを自動的に停止および開始でき、増分バックアップを実行できるため、ここにうまく適合します。したがって、最近変更されたリポジトリの一部のみをバックアップします (リポジトリが大きく、リモートの場所にバックアップする場合に役立ちます)。 )。
例:
- Cobian バックアップをインストールする
バックアップ タスクを追加します。
ソースをリポジトリ フォルダーに設定します (例:
C:\Repositories\
)。バックアップ前イベント
"STOP_SERVICE"
VisualSVN を追加し、バックアップ後のイベント、
"START_SERVICE"
VisualSVN、必要に応じて他のオプションを設定します。古いものの削除、バックアップ スケジュール、保存先、圧縮を含む増分バックアップを設定しました。アーカイブの分割など
利益!
svn サーバーをバックアップするには 2 つの主な方法があります。1 つ目は、リポジトリ ファイルのコピーを作成するホットコピーです。このアプローチの主な問題は、基礎となるファイル システムに関するデータを保存することです。この種のバックアップは、別の svn サーバーの種類または別のマシンで行います。ダンプと呼ばれる別のタイプのバックアップがあります。このバックアップは、基礎となるファイル システムの情報を保存せず、tigiris.org サブバージョンに基づくあらゆる種類の SVN サーバーに移植可能です。
コマンドプロンプトからsvnadminツール(ホットコピーとダンプを実行できます)を使用できるバックアップツールについて、このコンソールはsvnサーバーが存在する同じディレクトリに存在するか、svnバックアップツールをグーグルで検索できます。
私が推奨するのは、両方の種類のバックアップを作成し、それらをオフィスからメール アカウント、Amazon s3 サービス、ftp、または azure サービスに転送することです。そうすれば、svn サーバーを外部のどこかにホストする必要なく、安全なバックアップを取得できます。あなたのオフィス。
リポジトリ ディレクトリ全体をバックアップの場所にコピーするだけです。そうすれば、何か問題が発生した場合でも、ディレクトリをコピーするだけですぐに使用できるようになります。
必要に応じて、権限を保持してください。通常、これは Linux マシンでのみ問題になります。
ホストされたリポジトリの場合、svn バージョン 1.7 以降で使用できます。これは、ローカル リポジトリの場合svnrdump
と似ています。svnadmin dump
この記事では、本質的に次のように簡単に説明します。
svnrdump dump /URL/to/remote/repository > myRepository.dump
ダンプ ファイルをダウンロードしたら、ローカルにインポートできます。
svnadmin load /path/to/local/repository < myRepository.dump
または、選択したホストにアップロードします。
FSFS リポジトリ形式 (デフォルト) を使用している場合は、リポジトリ自体をコピーしてバックアップを作成できます。古い BerkleyDB システムでは、リポジトリはプラットフォームに依存しないため、通常は svnadmin ダンプを使用する必要があります。
バックアップに関するsvnbook ドキュメントのトピックでsvnadmin hotcopy
は、使用中のファイルなどの問題を処理するため、このコマンドを推奨しています。
@echo off
set hour=%time:~0,2%
if "%hour:~0,1%"==" " set hour=0%time:~1,1%
set folder=%date:~6,4%%date:~3,2%%date:~0,2%%hour%%time:~3,2%
echo Performing Backup
md "\\HOME\Development\Backups\SubVersion\%folder%"
svnadmin dump "C:\Users\Yakyb\Desktop\MainRepositary\Jake" | "C:\Program Files\7-Zip\7z.exe" a "\\HOME\Development\Backups\SubVersion\%folder%\Jake.7z" -sibackupname.svn
これは、バックアップを実行する実行中のバッチファイルです。
毎日および完全なバックアップ ソリューションの場合は、こちらの SVN バックアップ スクリプトを使用してください。
プロジェクトのリモート SVN リポジトリのバックアップを取る目的で従った手順をまとめました。
install svk (http://svk.bestpractical.com/view/SVKWin32)
install svn (http://sourceforge.net/projects/win32svn/files/1.6.16/Setup-Subversion-1.6.16.msi/download)
svk mirror //local <remote repository URL>
svk sync //local
これには時間がかかり、リポジトリからログを取得していることがわかります。内に一連のファイルを作成しますC:\Documents and Settings\nverma\.svk\local
。
このローカル リポジトリをリモート リポジトリからの最新の変更セットで更新するには、前のコマンドを時々実行するだけです。
/home/user/.svk/local
これで、通常の SVN リポジトリであるかのように、ローカル リポジトリ (この例では) を操作できます。
このアプローチの唯一の問題は、ローカル リポジトリが、リモート リポジトリの実際のリビジョンによってインクリメントされたリビジョンで作成されることです。誰かが書いたように:
svn mirror コマンドは、作成したばかりのリポジトリにコミットを生成します。そのため、後続の同期によって作成されたすべてのコミットには、リモートのパブリック リポジトリと比較して 1 ずつインクリメントされたリビジョン番号が含まれます。
しかし、リモートリポジトリのバックアップが時々必要だったので、これは私にとっては問題ありませんでした。
検証:
確認するには、次のようにローカル リポジトリで SVN クライアントを使用します。
svn checkout "file:///C:/Documents and Settings\nverma/.svk/local/" <local-dir-path-to-checkout-onto>
このコマンドは、ローカル リポジトリから最新のリビジョンをチェックアウトします。最後にそれは言いChecked out revision N
ます。これN
は、リモート リポジトリで見つかった実際のリビジョンよりも 1 つ多くなっています (上記の問題のため)。
svk もすべての履歴を持っていることを確認するために、2、10、50-r
などを使用してさまざまな古いリビジョンで SVN チェックアウトを実行しました。その後、ファイル<local-dir-path-to-checkout-onto>
がそのリビジョンのものであることが確認されました。
最後に、ディレクトリC:/Documents and Settings\nverma/.svk/local/
を zip し、zip をどこかに保存します。これを定期的に続けてください。
他の人が言ったように、Subversion チームの hot-backup.py には、単純なものよりも優れた機能がいくつかありますsvnadmin hotcopy
マシン上のすべてのリポジトリをスパイダーする python スクリプトでスケジュールされたタスクを実行し、ホットバックアップを使用して数日分のホットコピー (破損の偏執狂) とsvnadmin svndump
リモート マシンを保持します。それからの復元は本当に簡単です-これまでのところ。