svnsync 로 subversion repository 백업하기
개요
subversion repository 를 구축했다면 저장소 백업 정책도 수립해야 한다. 2008년에 저장소 백업 방법을 올린적이 있는데 다시 한 번 정리해 본다.
일반적으로 저장소를 백업할 수 있는 방법은 여러가지 가 있다.
svn backup 종류
svnadmin dump
사용법: svnadmin dump REPOS_PATH
옵션으로는 -r LOGWER[:UPPER] 형식으로 dump 할 revision 의 구간을 지정할 수 있다.
revision을 나눌 경우 해당 revision 내에서 svn copy나 mv 를 수행했는데 참고하는 revision이 구간내에 없으면 load 시에 문제가 발생할 수 있다.
svnadmin dump -r 1000:2000 /svnroot > myrepos-1000,2000.dmp
단점은 local repository 만 가능하므로 덤프된 파일을 별도의 백업 서버로 옮겨야 한다.
svnadmin hotcopy
사용법: svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH
hotcopy 명령으로 저장소를 복사할 수 있다. local 에만 복사되므로 dump 해서 덤프 파일을 백업서버로 옮기거나 백업서버를 NFS 로 mount 한 후에 mount 된 폴더에 hotcopy 를 수행해야 원격지 백업까지 가능하다.
svnsync
URL 을 지원하므로 리모트에 있는 저장소를 백업하기에 가장 적당한 방법이다.
백업 설정
환경
svn 사용 환경은 다음과 같다. 192.168.0.10 이 svn 서버이고 20번에서 svnsync 로 백업을 수행할 예정이다.
Svn Server | 192.168.0.10 |
---|---|
Backup Server | 192.168.0.20 |
설정
https://192.168.0.10/repos 저장소를 Backup Server(192.168.0.20)의 /var/backup/svnbackup/repos 에 백업한다. 백업서버에서 다음 명령어를 수행한다.
- svnadmin create /var/backup/svnbackup/repos
- vi /var/backup/svnbackup/repos/hooks/pre-revprop-change
다음 내용을 추가하고 저장한다.
#!/bin/sh exit 0;
Windows 의 경우 pre-revprop-change.bat 의 이름으로 다음 내용을 저장한다.
@ECHO OFF exit 0
실행 속성 부여
chmod +x /var/backup/svnbackup/repos/hooks/pre-revprop-change
svnsync 설정을 초기화 한다.
svnsync init file:///var/backup/svnbackup/repos https://192.168.0.10/repos ## Windows의 경우 file URL 뒤에 Drive 명도 주어야 한다. ## svnsync init file:///d:\svnbackup\repos https://192.168.0.10/repos
svnsync 구동
svnsync sync file:///var/backup/svnbackup/repos
위의 과정을 script 로 만들었으니 REPOS_PATH, REMOTE 만 수정해서 구동
svnsync.sh#!/bin/sh ## local sync path REPOS_PATH=/var/backup/svnbackup/repos ## remote repository url REMOTE=https://192.168.0.10/repos if [ ! -d ${REPOS_PATH} ];then svnadmin create ${REPOS_PATH}; echo '#!/bin/sh' > ${REPOS_PATH}/hooks/pre-revprop-change echo "exit 0;" >> ${REPOS_PATH}/hooks/pre-revprop-change chmod +x ${REPOS_PATH}/hooks/pre-revprop-change svnsync init file:///${REPOS_PATH} ${REMOTE} fi svnsync sync file:///${REPOS_PATH}
cron 에 등록
정상적으로 끝났다면 cron 에 넣어서 주기적으로 자동화한다.
백업 스크립트 생성
## 백업 스크립트 생성 echo '#!/bin/sh' > /usr/local/sbin/svnbackup.sh echo "svnsync sync file:///var/backup/svnbackup/repos" >> /usr/local/sbin/svnbackup.sh chmod +x /usr/local/sbin/svnbackup.sh
- cron 에 등록
- crontab -e
아래 내용을 추가
## 0시부터 23시까지 1시간마다 백업수행 0 0-23 * * * /usr/local/sbin/svnbackup.sh
crontab -
확인
svn log 명령어를 확인해서 최근 commit 내역이 동기화 되고 있는지 확인한다.
## 최근 5개의 로그만 출력 svn log file:///var/backup/svnbackup/repos -l 5