subversion 版本库数据迁移,在CentOS服务器上迁移
subversion 版本库数据迁移,从一台CentOS服务器迁移到另一台CentOS新服务器,迁移方法有多种。
迁移方法一 (推荐方案)
直接拷贝复制 SVN 目录,压缩打包复制迁移到另一台服务器,优点是拷贝文件夹大小较小,缺点可能会 subversion 版本不一致,版本日志不全(猜的,实测没有这些问题)
1、本地拷贝备份 SVN 根目录
cp -r /home/data/SVN/ /opt/SVN_bk_20160812
cd /opt/
tar zcvf SVN_bk_20160812.tar.gz SVN_bk_20160812
2、另一台服务器上拷贝压缩后的 SVN 根目录
在另一台目标服务器上,把原服务器上备份压缩的 SVN 根目录拷贝过来
cd /opt/
scp -r mimvp@115.28.238.66:/opt/SVN_bk_20160812.tar.gz .
# 输入原服务器密码
tar zxvf SVN_bk_20160812.tar.gz
mv -r SVN_bk_20160812 /home/data/SVN/
迁移方法二(推荐方案)
svnadmin dump 是官网推荐的 subversion 迁移方法,缺点是dump文件大,拷贝复制时间长
1、本地 dump SVN 根目录
cd /opt/
svnadmin dump /home/data/SVN/repository/ > /opt/SVN_repository_20160812.dump
* Dumped revision 0.
* Dumped revision 1.
* Dumped revision 2.
* Dumped revision 3.
* Dumped revision 4.
* Dumped revision 5.
。。。。。。
* Dumped revision 2715.
* Dumped revision 2716.
* Dumped revision 2717.
* Dumped revision 2718.
* Dumped revision 2719.
* Dumped revision 2720.
tar zcvf SVN_repository_20160812.dump.tar.gz SVN_repository_20160812.dump
du -sh SVN*
896M SVN
896M SVN_bk_20160812
833M SVN_bk_20160812.tar.gz
2.4G SVN_repository_20160812.dump
1.6G SVN_repository_20160812.dump.tar.gz
说明:转存文件 SVN_repository_20160812.dump 比原文件的版本库本身 SVN 大很多倍,因为在转存文件中,每个文件的每个版本都以完整的文本形式保存下来。
2、另一台服务器上拷贝压缩后的 SVN dump文件
将 SVN_repository_20160812.dump.tar.gz 文件拷贝到新的服务机上,然后将 dump 文件导入
cd /opt/
scp -r mimvp@115.28.238.66:/opt/SVN_repository_20160812.dump.tar.gz .
# 输入原服务器密码
tar zxvf SVN_repository_20160812.dump.tar.gz
# 创建新的版本库
cd /home/data/SVN/
svnadmin create repository
# 将 dump 文件导入
svnadmin load /home/data/SVN/repository/ < /opt/SVN_repository_20160812.dump
<<< Started new transaction, based on original revision 1
* adding path : branches ... done.
* adding path : tags ... done.
* adding path : trunk ... done.
------- Committed revision 1 >>>
<<< Started new transaction, based on original revision 2
* adding path : trunk/main.c ... done.
------- Committed revision 2 >>>
<<< Started new transaction, based on original revision 3
* editing path : trunk/main.c ... done.
------- Committed revision 3 >>>
<<< Started new transaction, based on original revision 4
* editing path : trunk/main.c ... done.
加载恢复 SVN 后,其大小会大幅减少到SVN真实的大小,约 880 M左右
因此,推荐使用迁移方法一,版本都保留了,拷贝文件大小还小,兼容性也可以,不会出错
迁移方法三
svnsync 同步 subversion 库
源目录:svn://192.168.1.10/repository
目标目录:svn://192.168.1.20/repository
1、创建备份版本库
svnadmin create repository
此时 repository下就有hooks目录,拷贝 repository/hooks/pre_revprop-change.tmpl 至 repository/hooks/pre_revprop-change
cd /home/data/SVN/repository/
cp hooks/pre-revprop-change.tmpl hooks/pre-revprop-change
vim hooks/pre-revprop-change
修改 pre_revprop-change 配置文件最后一行,将 exit 1 修改为 exit 0
2、初始化版本库
svnsync init repository svn://192.168.1.10/repository
即 svnsync init 目标库 源库
会向你询问源库的用户名和密码,输入完毕显示 Copied properties for revision 0.
3、版本库同步
svnsync sync file:///localhost/repository
sync初次同步是全量备份,可能耗时较长,第一次备份过后,sync后续的备份就是增量备份了
4、附上迁移脚本
脚本仅供参考,不可以直接运行,需替换一些参入,如 传入参数、源服务器ip地址等
#!/bin/bash init_repo() { cp $backupdir/$line/hooks/pre-revprop-change.tmpl $backupdir/$line/hooks/pre-revprop-change sed -i '3,65d;s/exit 1/exit 0/g' $backupdir/$line/hooks/pre-revprop-change chmod a+x $backupdir/$line/hooks/pre-revprop-change svnsync init file://$backupdir/$line/ http://ip/svn/$line --username apache --password 123456 #--allow-non-empty if [ $? -eq 0 ];then echo " init $backupdir/$line success " else echo " init $backupdir/$line faild " exit 1 fi } create_repo() { svnadmin create $backupdir/$line if [ $? -eq 0 ];then echo " create $backupdir/$line success " else echo " create $backupdir/$line faild " exit 1 fi } sync_repo() { cat repofile | while read line do echo "start $backupdir/$line " svnsync sync file://$backupdir/$line --username apache --password 123456 if [ $? -eq 0 ];then echo " sync $backupdir/$line success " else echo " sync $backupdir/$line faild " exit 1 fi done } # 执行入口 backupdir=/data0/www/svnroot if test -e $backupdir; then echo "backup dir exists" else mkdir -p $backupdir fi cat repofile | while read line do if test -e $backupdir/$line; then echo "repo $backupdir/$line exists" if test -e $backupdir/$line/hooks/pre-revprop-change; then echo "repo $backupdir/$line has been init" else init_repo fi else create_repo init_repo fi done echo "start svn sync " sync_repo
参考推荐:
git/svn reset/revert 回滚到服务器上的某一个版本
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2018-11-29 05:00:58
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!