SVN 저장소 백업 전략


195

SVN을 처음 사용하고 있으며 Windows 환경에서 리포지토리를 백업하는 데 사용할 수있는 방법을 알고 싶습니다.


1
Windows 용 VisualSVN Server에는 일정에 따라 SVN 리포지토리를 백업하고 확인하는 기본 제공 기능이 포함되어 있습니다. visualsvn.com/server/features/backup
bahrep

답변:


179

(Linux)와 같은 것을 사용할 수 있습니다.

svnadmin dump repositorypath | gzip > backupname.svn.gz

Windows는 GZip을 지원하지 않으므로 다음과 같습니다.

svnadmin dump repositorypath > backupname.svn

11
확실하지는 않지만 7-zip과 같은 일부 도구는 STDIN에서 데이터를 압축 할 수 있으므로 Windows에서도 첫 번째 스타일을 사용할 수 있습니다.
nickf

5
나는 이것을 직접보고 있으며 문서 svnbook.red-bean.com/nightly/en/… 에서 한 가지 의견 은 --deltas 옵션을 사용하지 않으면 svnadmin 덤프의 매우 큰 출력을 얻을 수 있다는 것입니다.
Jason S

5
그리고 Windows는 gzip을 지원합니다. unxutils 웹 페이지 unxutils.sourceforge.net
Jason S

52
7Zip 사용 : svnadmin dump repositorypath | "%ProgramFiles%\7-Zip\7z.exe" a backup.7z -sibackupname.svn 그러면 'backupname.svn'이라는 단일 파일이 포함 된 'backup.7z'라는 파일이 생성됩니다 svnadmin dump.
Matt

4
@Josh Stodola bash :for project in *; do svnadmin dump ${project} | gzip > /backuppath/${project}.svn.gz; done;
Fedir RYKHTIK

107

다음과 같이 svnadmin hotcopy를 사용합니다.

svnadmin hotcopy C:\svn\repo D:\backups\svn\repo

당으로 :

다른 프로세스가 저장소를 사용하는지 여부에 관계없이 언제든지이 명령을 실행하고 저장소의 안전한 사본을 작성할 수 있습니다.

물론 백업 사본을 ZIP (바람직하게는 7-Zip) 할 수 있습니다. IMHO 백업 옵션 중 가장 간단합니다. 재난이 발생하면 다시 압축을 풀고 다른 작업을 수행 할 수 있습니다.


13
몇 가지 이유로 svnadmin 덤프가 백업에 바람직하다고 생각합니다. 참조 svn.haxx.se/users/archive-2005-05/0842.shtml
daremon

4
@ daremon : 링크 된 게시물의 답글을 읽으십시오. 특히 svnadmin dump에 대한 게시물에는 repo의 제어 파일이 포함되어 있지 않습니다.
Powerlord

접전하지만, 나는 R. Bemrose에 의해 제안 응답 읽은 후 svnadmin 덤프를 위해 투표하고
mobibob을

hotcopy 명령은 생성 된 백업을 덮어 쓰거나 늘리지 않습니다. 따라서 작업 스케줄러를 사용하여 창에서 자동화 할 계획이라면 다음 배치 파일을보십시오. cfchimp.com/wordpress/2008/05/…
Ryan Sampson

1
경고의 말. svnsync가 실행되는 동안 저장소의 svnsync'd 미러 사본을 핫 카피하지 마십시오! 결과 사본이 손상되었을 수 있습니다. 자세한 내용은이 스레드를 참조하십시오 : subversion.open.collab.net/ds/…
zvolkov


22

다음은 Perl 스크립트입니다.

  1. 리포지토리 백업
  2. SCP를 통해 다른 서버로 복사
  3. 백업 검색
  4. 백업에서 테스트 저장소 작성
  5. 시험 체크 아웃
  6. 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`;

이 유형의 백업에 대한 합리성에 대한 스크립트 소스 및 세부 사항.


19

svnsync를 사용 하여 원격 서버를 미러 / 슬레이브로 설정합니다. 2 주 전에 서버가 다운되었으며 슬레이브를 기본 위치로 쉽게 전환 할 수있었습니다 (슬레이브 저장소의 UUID를 원래 위치로 재설정하기 만하면 됨).

또 다른 이점은 동기화가 두 서버 중 하나의 작업이 아닌 중개인에 의해 실행될 수 있다는 것입니다. 두 개의 VPN에 대한 클라이언트가 그들 사이에 저장소를 동기화했습니다.


그래서 그것은 분명히 두 버전 사이의 최신 레포 버전을 동기화합니까?
PositiveGuy

1
제목에 있지만 "동기화"라고 부르지 않습니다. 그것은 실제로 백업이며 마스터에서 수정하고 슬레이브에 넣습니다. 슬레이브를 수정하면 "동기화"가 깨지거나 광기가 나옵니다. 이 도구의 용도는 오프 사이트, 읽기 전용 미러를 만드는 것이지만 백업 서버를 만드는 훌륭한 작업을 수행합니다.
Tom Mayfield

1
svnsync의 장점은이를 자주 실행할 수 있다는 것입니다. 10 분마다 또는 커밋마다 (훅 사용) 이것의 장점은 마지막 백업과 라이브 리포지토리 사이에 발생할 수있는 잠재적 인 데이터 손실을 줄일 수 있다는 것입니다.
8DH

12

svnadmin 핫 카피

svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH

이 부속 명령은 모든 후크, 구성 파일 및 데이터베이스 파일을 포함하여 저장소의 전체 "핫"백업을 작성합니다.




5

기본적으로 svn 서버가 중지 된 경우 리포지토리 폴더를 복사하는 것이 안전합니다. (출처 : https://groups.google.com/forum/?fromgroups#!topic/visualsvn/i_55khUBrys%5B1-25%5D )

따라서 서버를 중지 할 수 있다면 스크립트를 작성하거나 스크립트를 사용하여 리포지토리를 복사하십시오. Cobian Backup은 서비스를 자동으로 중지 및 시작할 수 있으며 증분 백업을 수행 할 수 있으므로 최근에 변경된 저장소의 일부만 백업 할 수 있습니다 (리포지토리가 크고 원격 위치에 백업하는 경우 유용함) ).

예:

  1. 코비안 백업 설치
  2. 백업 작업을 추가하십시오.

    • 저장소 폴더로 설정 소스 (예를 들어 C:\Repositories\)

    • 사전 백업 이벤트 "STOP_SERVICE"VisualSVN 추가

    • 백업 후 이벤트, "START_SERVICE"VisualSVN 추가

    • 필요에 따라 다른 옵션을 설정하십시오. 기존 백업 제거, 백업 일정, 대상, 압축을 포함하여 증분 백업을 설정했습니다. 아카이브 분할 등

  3. 이익!


4

svn 서버를 백업하는 두 가지 주요 방법이 있습니다. 먼저 저장소 파일의 사본을 작성하는 핫 카피입니다.이 방법의 주요 문제점은 기본 파일 시스템에 대한 데이터를 저장하므로 repostore를 시도하는 데 어려움이있을 수 있습니다 다른 svn 서버 종류 또는 다른 컴퓨터에서 이러한 종류의 백업. 덤프라는 또 다른 유형의 백업이 있습니다.이 백업은 기본 파일 시스템의 정보와 해당 기능을 tigiris.org 하위 버전을 기반으로하는 모든 종류의 SVN 서버에 저장하지 않습니다.

백업 도구에 관해서는 명령 프롬프트에서 svnadmin 도구 (핫 카피 및 덤프를 수행 할 수 있음)를 사용할 수 있습니다.이 콘솔은 svn 서버가있는 동일한 디렉토리에 있거나 svn 백업 도구를 Google에 사용할 수 있습니다.

내 권장 사항은 두 종류의 백업을 모두 수행하고 이메일 수, 아마존 s3 서비스, ftp 또는 푸른 서비스로 사무실에서 가져 오는 것입니다. 그러면 svn 서버를 다른 곳에서 호스팅하지 않고도 보안 백업을 수행 할 수 있습니다 당신의 사무실.


4

다음은 로컬 및 원격 서브 버전 리포지토리를 덤프하기위한 GUI Windows 도구입니다.

https://falsinsoft-software.blogspot.com/p/svn-backup-tool.html

도구 설명은 다음과 같습니다.

이 도구를 사용하면 로컬 및 원격 서브 버전 저장소의 덤프 백업을 만들 수 있습니다. 소프트웨어는 "svnadmin"과 같은 방식으로 작동하지만 GUI 프론트 엔드가 아닙니다. 대신 다른 추가 도구없이 독립형 모드로 덤프를 작성할 수 있도록 서브 버전 라이브러리를 직접 사용하십시오.

이 도움을 바랍니다 ...


이것을 공유해 주셔서 감사합니다. 명시된대로 작동합니다.
Ed DeGagne

3

전체 repo 디렉토리를 백업 위치로 복사하고 싶습니다. 이렇게하면 어떤 일이 발생하면 디렉토리를 다시 복사하여 바로 갈 수 있습니다.

필요한 경우 권한을 유지하십시오. 일반적으로 이것은 Linux 시스템에서만 문제가됩니다.


7
누군가가 복사 작업 중에 커밋을하면 정확하게 안전하지 않습니다. 리포지토리에 액세스하여 드물게 사용하는 사람은 4 명뿐입니다. 핫 카피 사용에 대한 Duncan의 답변을 참조하십시오.
nickf

그러나 당신이 완전히 독창적으로 일한다면, 이것이 레포를 백업하는 안전한 방법이라고 생각합니까? 개인 프로젝트에 서브 버전을 사용하는데 이것이 현재하고있는 일입니다.
앤드류 개리슨

3

호스팅 리포지토리의 경우 svn 버전 1.7 이후로 사용할 svnrdumpsvnadmin dump있으며 로컬 리포지토리와 유사 합니다. 이 기사 는 기본적으로 다음과 같이 요약되어 있습니다.

svnrdump dump /URL/to/remote/repository > myRepository.dump

덤프 파일을 다운로드 한 후 로컬로 가져올 수 있습니다

svnadmin load /path/to/local/repository < myRepository.dump

또는 선택한 호스트에 업로드하십시오.


3

FSFS 저장소 형식 (기본값)을 사용하는 경우 저장소 자체를 복사하여 백업을 만들 수 있습니다. 이전 BerkleyDB 시스템에서 저장소는 플랫폼 독립적이지 않으므로 일반적으로 svnadmin 덤프를 사용하려고합니다.

백업 svnbook 문서 항목 권장 svnadmin hotcopy그것을 사용 등의 파일과 같은 문제를 돌볼 것 같은 명령을 사용합니다.


2
@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

이것은 내 백업을 수행하는 배치 파일입니다.



1

프로젝트의 원격 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 저장소 인 것처럼 !

이 방법의 유일한 문제점은 로컬 저장소가 원격 저장소의 실제 개정에 따라 개정 단위로 작성된다는 것입니다. 누군가가 쓴 것처럼 :

svk miror 명령은 방금 생성 된 저장소에서 커밋을 생성합니다. 따라서 후속 동기화에서 작성된 모든 커밋에는 원격 공용 저장소와 비교할 때 개정 번호가 하나씩 증가합니다.

그러나 원격 저장소의 백업을 원할 때만해도 괜찮습니다.

확인:

확인하려면 다음과 같이 로컬 저장소와 함께 SVN 클라이언트를 사용하십시오.

svn checkout "file:///C:/Documents and Settings\nverma/.svk/local/"  <local-dir-path-to-checkout-onto>

그런 다음이 명령은 로컬 저장소에서 최신 개정을 체크 아웃합니다. 결국 그것은 말한다 Checked out revision N. 이것은 N위에서 언급 한 문제로 인해 원격 저장소에서 발견 된 실제 개정보다 하나 이상입니다.

svk가 모든 히스토리를 가져 왔는지 확인하기 위해 SVN 체크 아웃은 -r2, 10, 50 등을 사용하여 다양한 이전 버전으로 실행 되었습니다.<local-dir-path-to-checkout-onto> 버전이 해당 버전에서 확인되었습니다.

마지막으로 디렉토리 C:/Documents and Settings\nverma/.svk/local/를 압축하고 압축 파일을 어딘가에 저장하십시오. 이것을 정기적으로 계속하십시오.


0

다른 사람들이 말했듯이 Subversion 팀의 hot-backup.py에는 평범한 것보다 멋진 기능이 있습니다. svnadmin hotcopy

컴퓨터의 모든 리포지토리를 스파이더하는 python 스크립트에서 예약 된 작업을 실행하고 핫 백업을 사용하여 며칠 동안의 핫 카피 (손상 편집증)와 svnadmin svndump원격 컴퓨터를 유지합니다. 지금까지는 복원이 정말 쉽습니다.


0

1.1 SVN (Subversion) 저장소에서 덤프 작성

svnadmin dump /path/to/reponame > /path/to/reponame.dump

실제 예

svnadmin dump /var/www/svn/testrepo > /backups/testrepo.dump

1.2 Gzip 생성 덤프

gzip -9 /path/to/reponame.dump

실제 예

gzip -9 /backups/testrepo.dump

1.3 단일 라이너가있는 SVN 덤프 및 Gzip 덤프

svnadmin dump /path/to/reponame | gzip -9 > /path/to/reponame.dump.gz

실제 예

svnadmin dump /var/www/svn/testrepo |Â gzip -9 > /backups/testrepo.dump.gz

Linux에서 SVN (Subversion) 저장소를 백업 (덤프) 및 복원 (로드)하는 방법
참조 : svn subversion 백업 및 복원

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.