Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

일반적으로 저장소를 백업할 수 있는 방법은 여러가지 가 있다.

 


svn backup 종류

svnadmin dump

...

hotcopy 명령으로 저장소를 복사할 수 있다. local 에만 복사되므로 dump 해서 덤프 파일을 백업서버로 옮기거나 백업서버를 NFS 로 mount 한 후에 mount 된 폴더에 hotcopy 를 수행해야 원격지 백업까지 가능하다. 


svnsync

URL 을 지원하므로 리모트에 있는 저장소를 백업하기에 가장 적당한 방법이다. 

...

svn 사용 환경은 다음과 같다. 192.168.0.10 이 svn 서버이고 20번에서 svnsync 로 백업을 수행할 예정이다.

Svn Server192.168.0.10
Backup Server192.168.0.20

 


설정

https://192.168.0.10/repos 저장소를 Backup Server(192.168.0.20)의 /var/backup/svnbackup/repos 에 백업한다. 백업서버에서 다음 명령어를 수행한다.

  1. svnadmin create /var/backup/svnbackup/repos
  2. vi /var/backup/svnbackup/repos/hooks/pre-revprop-change
  3. 다음 내용을 추가하고 저장한다.

    Code Block
    languagebash
    #!/bin/sh
    exit 0;

    Windows 의 경우 pre-revprop-change.bat 의 이름으로 다음 내용을 저장한다.

    Code Block
    languagebash
    @ECHO OFF
    exit 0

     

  4. 실행 속성 부여

    Code Block
    chmod +
    x /var/backup/svnbackup/repos/hooks/pre-revprop-change


  5. svnsync 설정을 초기화 한다.

    Code Block
    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
  6. svnsync 구동

    Code Block
    svnsync sync file:///var/backup/svnbackup/repos
  7. 위의 과정을 script 로 만들었으니 REPOS_PATH, REMOTE 만 수정해서 구동

    Code Block
    languagebash
    titlesvnsync.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 에 넣어서 주기적으로 자동화한다.

  1. 백업 스크립트 생성
    Code Block
    languagebash
    ## 백업 스크립트 생성
    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
  2. cron 에 등록
    1. crontab -e
    2. 아래 내용을 추가

      Code Block
      ## 0시부터 23시까지 1시간마다 백업수행
      0 0-23 * * * /usr/local/sbin/svnbackup.sh
  3. crontab -
     

     


확인

svn log 명령어를 확인해서 최근 commit 내역이 동기화 되고 있는지 확인한다.

Code Block
languagebash
## 최근 5개의 로그만 출력
svn log file:///var/backup/svnbackup/repos -l 5

...


참고 자료