Subversion 백업 ZT

7579 단어 subversion
저자: Rock Sun, Subversion 중국어 사이트.리 트 윗 이 있 으 면 출처 를 밝 혀 주세요. http://www.subversion.org.cn/index.php?option=com_content&task=view&id=85&Itemid=9
버 전 제어 의 가장 관건 적 인 것 은 데이터 의 안전성 을 확보 하 는 것 이다. 디스크 가 손상 되 고 프로그램 고장 으로 인해 버 전 라 이브 러 리 가 돌 이 킬 수 없 는 오 류 를 초래 해 서 는 안 된다. 이 를 위해 비교적 완 비 된 백업 전략 을 제정 해 야 한다.Subversion 에서 저 희 는 세 가지 백업 방식 이 있 습 니 다. 완전 백업, 증분 백업 과 동기 화 버 전 라 이브 러 리 입 니 다.
1, 완전 백업
가장 흔 하고 간단 한 백업 은 바로 복사 명령 을 사용 하여 버 전 라 이브 러 리 디 렉 터 리 를 백업 디 렉 터 리 에 복사 하면 된다.그러나 이렇게 하 는 것 은 안전 한 방식 이 아니다. 복사 할 때 버 전 라 이브 러 리 가 바 뀌 면 백업 결과 가 정확 하지 않 고 백업 의 역할 을 잃 게 되 기 때문에 Subversion 은 'svnadmin hotcopy' 명령 을 제공 하여 이런 문 제 를 방지 할 수 있다.
저희 버 전 라 이브 러 리 디 렉 터 리 기억 나 세 요?
D:\SVNROOT ├─project1 │  ├─conf │  ├─dav │  ├─db │  │  ├─revprops │  │  ├─revs │  │  └─transactions │  ├─hooks │  └─locks └─project2     ├─conf     ├─dav     ├─db     │  ├─revprops     │  ├─revs     │  └─transactions     ├─hooks     └─locks    
procject 1 을 d: \ svnrotbak 디 렉 터 리 에 백업 하려 면 다음 을 실행 해 야 합 니 다:
svnadmin hotcopy d:\svnroot\project1 d:\svnrootbak\project1
그러나 우 리 는 설정 관리자 로 서 이 과정 을 최적화 시 킬 방법 을 생각해 야 합 니 다. 만약 에 이 디 렉 터 리 에 많은 버 전 라 이브 러 리 가 있다 면 각 버 전 라 이브 러 리 에 이러한 문 구 를 백업 해 야 합 니 다. 그래서 저 는 아래 의 스 크 립 트 를 써 서 디 렉 터 리 에 있 는 모든 버 전 라 이브 러 리 를 백업 해 야 합 니 다.우 리 는 D: \ SVNROOT 에서 두 개의 파일 을 만 들 었 습 니 다. simpleBackup. bat:
@ echo 버 전 라 이브 러 리% 1 백업 중... @% SVNHOME%\bin\svnadmin hotcopy %1 %BACKUP_DIRECTORY% \ \% 2 @ echo 버 전 라 이브 러 리% 1 이 (가)% 2 (으) 로 백업 되 었 습 니 다!
이 파일 은 "svnadmin hotcopy" 에 대한 포장 일 뿐 이 고, 그 다음 에는 backup. bat 입 니 다.
echo off
remi Subversion 의 설치 디 렉 터 리 set SVNHOME="D:\Subversion"
remi 모든 버 전 라 이브 러 리 의 부모 디 렉 터 리 set SVNROOT=D:\svnroot
remi 백업 디 렉 터 리 set BACKUPSVN_ROOT=D:\svnrootbak
set BACKUP_DIRECTORY=%BACKUP_SVN_ROOT%\%date:~0,10% if exist %BACKUP_DIRECTORY% goto checkBack echo 백업 디 렉 터 리 만 들 기% BACKUPDIRECTORY%>>%SVN_ROOT%/backup.log
mkdir %BACKUP_DIRECTORY%
remi 는 디 렉 터 리 가 버 전 라 이브 러 리 인지 확인 하고, 만약 그렇다면 이름 백업 for / r% SVNROOT% %%I in (.) do @if exist "%%I\conf\svnserve.conf" %SVN_ROOT%\simpleBackup.bat "%%~fI" %%~nI goto end
: checkBack echo 백업 디 렉 터 리% BACKUPDIRECTORY% 가 이미 존재 합 니 다. 비 워 주세요.goto end
:end
사용 할 때 는 backup. bat 에서 시작 하 는 세 가지 경 로 를 수정 하고 두 개의 스 크 립 트 를 'SVN ROOT' 에 복사 하면 됩 니 다.이상 의 설정 에 따라 backup. bat 만 실행 하면 "SVN ROOT" 의 버 전 라 이브 러 리 를 "BACKUP SVN ROOT" 에 백업 하고 백업 이 있 는 날 의 디 렉 터 리 에 저장 할 수 있 습 니 다. 예 를 들 어 "D: \ svnrootbak \ \ 2006 - 10 - 22" 입 니 다.
비록 이 부분의 작업 은 매우 간단 하지만 누군가가 정기 적 으로 이 조작 을 집행 해 야 한다 (예 를 들 어 매주 새벽). 잊 혀 진 상황 이 발생 하지 않도록 우 리 는 이 조작 을 시스템 의 at 임무 에 넣 을 수 있다. 예 를 들 어 위의 환경 이다. at 임 무 를 설치 하기 위해 우 리 는 운행 한다.
at 1:00 /every:M D:\svnroot\backup.bat

이렇게 하면 매주 새벽 1 시 에 이 백업 과정 을 실행 합 니 다.물론 이 컴퓨터 에 백업 하 는 것 도 안전 하지 않 습 니 다. 다른 기계 에 올 려 야 할 지도 모 릅 니 다. 이것 은 당신 스스로 이 루어 져 야 합 니 다.
2, 증분 백업
완전 백업 은 매우 간단 하지만 대가 가 있 습 니 다. 버 전 라 이브 러 리 가 매우 클 때 완전 백업 을 자주 하 는 것 은 비 현실 적 이 고 필요 하지 않 습 니 다. 그러나 버 전 라 이브 러 리 가 백업 사이 에 문제 가 발생 하면 어떻게 해 야 합 니까? 여기 서 우 리 는 증분 백업 을 사 용 했 습 니 다.
증분 백업 은 보통 완전 백업 과 결합 하여 사용 합 니 다. Oacle 데이터베이스 의 압축 파일 로그 처럼 Subversion 이 제출 할 때마다 변 화 를 기록 한 다음 에 복구 가 필요 할 때 최신 사용 가능 한 상태 로 돌아 갈 수 있 습 니 다.이 예 에서 우리 가 사용 하 는 것 은 svnadmin dump 명령 으로 증분 백업 을 하 는 것 입 니 다. 사용 방법 은:
svnadmin dump project1 --revision 15 --incremental > dumpfile2
위의 명령 은 수정 버 전 15 에 대해 증분 백업 을 실 현 했 으 며, 출력 파일 dumpfile 2 는 수정 버 전 15 변경 내용 만 저장 했다.
매번 제출 한 결 과 를 기록 하기 위해 서 는 Subversion 의 특성 을 사용 해 야 합 니 다. 갈고리 프로젝트 1 디 렉 터 리 를 보십시오.
├─project1 │  ├─conf │  ├─dav │  ├─db │  │  ├─revprops │  │  ├─revs │  │  └─transactions │  ├─hooks │  └─locks
그 중의 hooks 디 렉 터 리 에 저 장 된 것 은 바로 갈고리 스 크 립 트 입 니 다. 우 리 는 여기에서 post - comit 갈고리 만 사용 합 니 다. 이 갈 고 리 는 제출 할 때마다 실 행 됩 니 다. 백업 기능 을 실현 하기 위해 hooks 아래 에 파일 post - comit. bat 를 만 듭 니 다. 내용 은 다음 과 같 습 니 다.
echo off set SVN_HOME="C:\Program Files\Subversion" set SVN_ROOT=D:\svnroot set UNIX_SVN_ROOT=D:/svnroot set DELTA_BACKUP_SVN_ROOT=D:\svnrootbak\delta
set LOG_FILE=%1\backup.log echo backup revision %2 >> %LOG_FILE%
for /r %SVN_ROOT% %%I in (.) do if D:/svnroot/%%~nI == %1 %SVN_ROOT%\%%~nI\hooks\deltaBackup.bat %%~nI %2 goto end
:end
이 스 크 립 트 를 통 해 D: \ svnroot 의 버 전 라 이브 러 리 를 제출 할 때 D: \ svnrootbak \ \ delta (이 디 렉 터 리 가 존재 하 는 지 확인) 를 자동 으로 증분 백업 할 수 있 습 니 다. 그 중에서 사용 하 는 deltaBackup. bat 는 어디 에 나 두 고 스 크 립 트 의 svnadmin dump 포장 만 할 수 있 습 니 다. 내용 은 다음 과 같 습 니 다.
@ echo 버 전 라 이브 러 리 백업 중% 2...% SVNHOME%\bin\svnadmin dump %SVN_ROOT%\%1 --incremental --revision %2 >> %DELTA_BACKUP_SVN_ROOT% \ \% 1. dump @ echo 버 전 라 이브 러 리% 2% 3 으로 백업 되 었 습 니 다!
위의 두 스 크 립 트 는 procject 2 의 hooks 디 렉 터 리 에 직접 복사 할 수 있 으 며 수정 하지 않 아 도 procject 2 의 자동 백업 을 실현 할 수 있 습 니 다.
이상 의 작업 은 이미 OK 되 었 습 니 다. 지금 해 야 할 일 은 완전 백업 과 증분 백업 을 결합 시 키 는 것 입 니 다. 즉, 완전 백업 후 증분 백업 결 과 를 정리 하여 완전 백업 후의 결과 만 저장 하도록 하 는 것 입 니 다.
버 전 라 이브 러 리 의 고장 이 발생 하면 버 전 라 이브 러 리 의 복구 작업 을 요구 합 니 다. 이것 은 svnadmin load 명령 을 사용 하 는 동시에 지난번 의 완전 백업 도 필요 합 니 다. 예 를 들 어 지난번 에 backuprepo 를 완전히 백업 하고 그 후의 증분 백업 dumpfile:
svnadmin load backuprepo < dumpfile
마지막 결 과 는 다운로드 svnroot.rar 하여 d: \ \ 아래로 압축 을 풀 고 bat 파일 몇 개 를 수정 하 는 SVN홈 에서 사용 할 수 있 습 니 다.
3, 버 전 라 이브 러 리 동기 화
Subversion 1.4 는 동기 화 체 제 를 추가 하여 하나의 버 전 라 이브 러 리 와 다른 버 전 라 이브 러 리 의 동기 화 를 실현 할 수 있 습 니 다. (단 방향 인 것 같 습 니 다) 우 리 는 버 전 라 이브 러 리 의 백업 이나 미 러 를 실현 할 수 있 습 니 다.
3.1. 대상 라 이브 러 리 초기 화
svnsync init svn://localhost/project2 svn://localhost/project1 

 

그 중에서 procject 2 는 목표 버 전 라 이브 러 리 이 고 procject 1 은 원본 버 전 라 이브 러 리 입 니 다.대상 버 전 라 이브 러 리 가 비어 있어 야 하 며, 버 전 속성 수정 을 허용 해 야 합 니 다. 즉, 대상 버 전 라 이브 러 리 의 hooks 디 렉 터 리 에 파일 pre - revprop - change. bat 를 추가 하면 내용 이 비어 있 습 니 다.
3.2. procject 2 에서 procject 1 까지 동기 화
svnsync sync svn://localhost/project2 

 

이때 프로젝트 2 의 작업 복사 본 을 업데이트 하면 프로젝트 1 의 모든 내용 을 발견 할 수 있 습 니 다.procject 1 이 또 제출 되면 procject 2 버 전 라 이브 러 리 에서 최신 변 화 를 볼 수 없 으 며, sync 작업 을 다시 실행 해 야 최신 변 화 를 동기 화 할 수 있 습 니 다.주의해 야 할 것 은 대상 버 전 라 이브 러 리 는 읽 기 전용 으로 만 들 수 있 고 대상 버 전 라 이브 러 리 가 변경 되면 계속 동기 화 할 수 없습니다.
3.3 동기 화 역사 속성의 수정
동기 화 는 역사 속성 에 대한 수정 을 업데이트 하지 않 기 때문에 svnsync 는 하위 명령 copy - revprops 도 있어 서 특정한 버 전의 속성 을 동기 화 할 수 있 습 니 다.
3. 갈고리 자동 동기 화
제출 할 때마다 동기 화 하려 면 원본 라 이브 러 리 에 post - comit 스 크 립 트 를 추가 해 야 합 니 다. 내용 은 다음 과 같 습 니 다.
echo off

set SVN_HOME="D:\Subversion"

%SVN_HOME%\bin\svnsync sync  --non-interactive svn://localhost/project2 

 

이상 의 내용 을 post - commit. bat 로 저장 한 다음 버 전 라 이브 러 리 procject 1 의 hooks 디 렉 터 리 에 넣 으 면 procject 1 이 제출 할 때마다 procject 2 의 동기 화 를 일 으 킵 니 다.

좋은 웹페이지 즐겨찾기