SVN遷移

阿里云服務器快到期了,要把公網的SVN遷移到內網里,今天剛弄完,總結下。

SVN命令

lsof -i :3690 查看svn是否啟動 
ps aux |grep 'svn' 查找所有svn啟動的進程 
kill -9 pid 殺死pid這個查找到的svn進程 
/usr/bin/svnserve --daemon --pid-file=/var/run/svnserve.pid -r /var/data/svn/repos --log-file /var/log/svnserve.log      指定以守護進程形式,pid,log的路徑來啟動svn
netstat -anp|grep svnserve    查看一下SVN信息

SVN遷移一般是備份當前庫到另一服務器進行庫恢復。

一般采用三種方式:

  1. svnadmin dump
  2. svnadmin hotcopy
  3. svnsync

SVN服務器幾種備份策略
SVN庫遷移整理方法總結

本人使用過前兩種方法,對于SVN庫的遷移,足矣。

svnadmin dump

  • 官方推薦的備份方式
  • 可以全量備份也可以增量備份,并提供了版本恢復機制。
  • 如果版本數過多,dump的過程將非常慢;
  • 備份耗時,恢復更耗時;不利于快速進行災難恢復。
  • 備份時數據變大,恢復后數據可能會變小(緩存之類不備份)
  • 庫下的passwdauthz不會備份,需要手動遷移
  • 恢復時庫的svnserve.conf里的password-dbauthz-db會自動更改

版本數少時可以使用,版本數多非常耗時,5.2G的數據,備份時大概需二十分鐘;恢復時大概需要八小時,都快哭了π_π

svnadmin hotcopy

  • 原設計目的估計不是用來備份的,只能進行全量拷貝
  • 備份過程較快,災難恢復也很快
  • 需要硬盤空間支持,備份時數據大小跟庫大小差不多
  • 恢復時庫的svnserve.conf里的password-dbauthz-db不會自動更改,需要手動更改,避免認證失敗

備份還原命令

先關閉所有運行的進程,并確認沒有程序在訪問存儲庫(如 httpd、svnserve 或本地用戶在直接訪問)。

備份

  • svnadmin dump
# 壓縮備份
svnadmin dump /path/to/repository | gzip > /path/to/repository-backup.gz.date
# 不壓縮備份
svnadmin dump /path/to/repository > /path/to/repository-backup.date
# 增量備份
svnadmin dump /path/to/repository –r sour_version:des_version --incremental >sour-des.date
  • svnadmin hotcopy
# 備份
svnadmin hotcopy /path/to/repository  /path/to/repository-backup.date
# 熱備份(沒試過)
svnadmin hotcopy /path/to/repository  /path/to/repository-backup.date –clean-logs
# 如果你傳遞–clean-logs選項,svnadmin會執(zhí)行熱拷貝操作,然后刪除不用的Berkeley DB日志文件;在任何時候運行這個命令得到一個版本庫的安全拷貝,不管其它進程是否使用這個版本庫。

恢復

  • svnadmin dump
# 建立新的svn存儲庫
svnadmin create /path/to/new_repository
# check
ls -l /path/to/new_repository
# 導入沒壓縮數據
svnadmin load /path/to/new_repository < /path/to/repository-backup.date
# 導入被壓縮數據
zcat /path/to/repository-backup.date | svnadmin load /path/to/new_repository 
  • svnadmin hotcopy
# 恢復
svnadmin hotcopy /path/to/repository-backup.date /path/to/new_repository  
# 直接覆蓋
mv /path/to/repository-backup.date /path/to/new_repository  

hotcopy恢復不需要先建立庫;網上說也可以直接覆蓋,本人沒試過

此時再啟動內網服務器svn服務,即可。如果啟用了iptables,主要要放通端口3690

簡單腳本

備份

#!/bin/bash

SOUR_SVN="/data/svn/repos"
DES_SVN="/data/svn-$(date +%F)"
[ ! -d "$DES_SVN" ] && mkdir -p "$DES_SVN"

for i in $(ls "$SOUR_SVN")
do
    # 如果是目錄,則是SVN庫,備份;否則是驗證文件之類的,拷貝
    [ ! -f $i ] && svnadmin dump "$SOUR_SVN"/$i "$DES_SVN"/$i-bak.$(date +%F) || cp "$SOUR_SVN"/$i "$DES_SVN"
done

#!/bin/bash
SOUR_SVN="/data/svn/repos"
DES_SVN="/data/svn-$(date +%F)"
[ ! -d "$DES_SVN" ] && mkdir -p "$DES_SVN"

for i in $(ls "$SOUR_SVN")
do
    # 如果是目錄,則是SVN庫,備份;否則是驗證文件之類的,拷貝
    [ ! -f $i ] && svnadmin hotcopy "$SOUR_SVN"/$i "$DES_SVN"/$i-bak.$(date +%F) || cp "$SOUR_SVN"/$i "$DES_SVN"
done

內網服務器可以連外網,直接傳,因數據量大,用scree (●'?'●)??
scp root@ip:/data/svn-0317 /home

恢復

#!/bin/bash

SOUR_SVN="/home/svn-0317"
DES_SVN="/var/data/svn/repos"

mkdir -p /var/data/svn/repos

for i in $(ls "$SOUR_SVN")
do
    [ ! -f $i ] && svnadmin create "$DES_SVN"/$i && svnadmin load "$SOUR_SVN"/$i "$DES_SVN"/${i%%-*} || cp "$SOUR_SVN"/$i "$DES_SVN"
done

#!/bin/bash

SOUR_SVN="/home/svn-0317"
DES_SVN="/var/data/svn/repos"

mkdir -p /var/data/svn/repos

for i in $(ls "$SOUR_SVN")
do
    [ ! -f $i ] && svnadmin hotcopy "$SOUR_SVN"/$i "$DES_SVN"/${i%%-*} || cp "$SOUR_SVN"/$i "$DES_SVN"
done

導完之后發(fā)現(xiàn)有個庫少了30M。。。

然后使用svnadmin hotcopy又備份了一次,發(fā)現(xiàn)也是少30M,猜想是緩存之類的數據

svnlook youngest x
# 查看庫的最新版本數

比對阿里云的庫版本跟內網的庫版本,一致,那就不管了,代碼完整就可以了?(′???)?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • <<編程基礎-語言SQL.Git.Docker>>SQL.PLSQLhttp://docs.pythontab.c...
    燕京博士閱讀 455評論 0 0
  • 前言 在Git流行起來之前,SVN是一個比較火爆的集中式的版本控制工具。但是Git作為分布式的版本控制工具,它在管...
    xiangang閱讀 20,304評論 4 7
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,837評論 18 139
  • SVN遷移Git ①本地SVN庫轉本地Git庫 情況一:不想保留svn提交記錄 刪除svn目錄文件中的.svn文件...
    大斌小姜閱讀 767評論 0 1
  • 怎么描述現(xiàn)在的心情呢,悲傷吧,嗯,就這個詞。 我最近的狀況一點都不好,可能是因為論文都寫完了,也沒什么兼職可以做,...
    平生君閱讀 393評論 0 0