1.发生琐定,解除步骤:
A.确定没有存取.关闭httpd服务器.
B.成为管理员身份
C.执行svnadmin recover /path/to/repo命令
D.重启动subversion.
//注意:
A.以管理员身份,非root身份,如果一root身份,要重新chmod,库的权限.
2.升级的步骤:
A.现有版本svnadmin ,将档案库dump出来
B.升级到新版的subversion
C.删除就档案库,再原处以新版本subversion,建立新的空档案库.
D.再利用新版本svnadmin ,将档案库load到刚刚建立好的档案库.
实例:
//导出
$svnlook youngest oldrepo
$svnadmin dump oldrepo >; dumpfile
//还原
$svnadmin load newrepo < dumpfile
3.即时备份目录
$svnadmin hotcopy /path/to/repo /backup/repo
4.渐进式备份实现.
A.建立文件hot-backup.perl.内容如下:
#!/usr/bin/perl -w
use strict;
my $repos_path = '/path/to/repos';
my $dumpfile = '/usr/backup/svn-dumpfile';
my $last_dumped = '/var/log/svn-last-dumped';
my $svnlook = '/usr/local/subversion/bin/svnlook';
my $svnadmin = '/usr/local/subversion/bin/svnadmin';
# Figure out the starting revision. Use 0 if we
cannot read the
# last-dumped file, else use the revision in that file incremented
# by 1.
my $new_start = 0;
if (open LASTDUMPED, $last_dumped)
{
my $line = <LASTDUMPED>;;
if (defined $line and $line =~ /^(\d+)/)
{
$new_start = $1 + 1;
}
close LASTDUMPED;
}
# Query the youngest revision in the repos.
my $youngest = `$svnlook youngest $repos_path`;
defined $youngest && $youngest =~ /^\d+$/
or die "$0: 'svnlook youngest $repos_path' cannot get youngest
revision.\n";
chomp $youngest;
# Do the backup.
system("$svnadmin dump $repos_path --revision $new_startyoungest
--incremental >;>; $dumpfile.tmp" == 0
or die "$0: svnadmin dump to '$dumpfile.tmp' failed.\n";
# Store a new last-dumped revision.
open LASTDUMPED, ">; $last_dumped.tmp"
or die "$0: cannot open '$last_dumped.tmp' for writing: $!\n";
print LASTDUMPED "$youngest\n";
close LASTDUMPED
or die "$0: error in closing '$last_dumped.tmp' for writing:
$!\n";
# Rename to final locations.
rename("$dumpfile.tmp", $dumpfile)
or die "$0: cannot rename '$dumpfile.tmp' to '$dumpfile':
$!\n";
rename("$last_dumped.tmp", $last_dumped)
or die "$0: cannot rename '$last_dumped.tmp' to '$last_dumped':
$!\n";
# All done!
B.备份.先编辑hot-backup.perl里面正确的路径名.
#vi hot-backup.perl修改为自己的路径:
my $repos_path = '/path/to/repos';
my $dumpfile = '/usr/backup/svn-dumpfile';
my $last_dumped = '/var/log/svn-last-dumped';
my $svnlook = '/usr/local/subversion/bin/svnlook';
my $svnadmin = '/usr/local/subversion/bin/svnadmin';
#perl hot-backup.perl得到的文件是/usr/backup/svn-dumpfile
c.还原
1.建立新的仓库
#svnadmin create /usr/local/repo/newrepo
2.还原信息
#svnadmin load /usr/local/repo/newrepo < /usr/backup/svn-dumpfile
3.注意:以后每天都备份.再执行还原即可,不必新建仓库了.
4.为了每段时间能验证备份的有效性.最好是建立一个验证仓库,用来还原,看信息是否正常。
d.有提交,就备份.进入仓库
#mv /hooks/post-commit.tmpl /hooks/post-commit
#vi /hooks/post-commit
添加内容在后面
perl /usr/local/subversion/backup/hot-backup.perl
每次提交触发一次备份
E.修改一下上面的程序,让能接受参数输入
#!/usr/bin/perl -w
use strict;
my $repos_path = $ARGV[0];
my $dumpfile = $ARGV[1];
my $last_dumped = $ARGV[2];
my $svnlook = '/usr/local/subversion/bin/svnlook';
my $svnadmin = '/usr/local/subversion/bin/svnadmin';
#for usage
if(@ARGV != 3 )
{
print "$0:[/path/to/repo] [/backup/dumpfile] [/var/log/lastdump]\n";
exit 1 ;
}
# Figure out the starting revision. Use 0 if we
cannot read the
# last-dumped file, else use the revision in that file incremented
# by 1.
my $new_start = 0;
if (open LASTDUMPED, $last_dumped)
{
my $line = <LASTDUMPED>;;
if (defined $line and $line =~ /^(\d+)/)
{
$new_start = $1 + 1;
}
close LASTDUMPED;
}
# Query the youngest revision in the repos.
my $youngest = `$svnlook youngest $repos_path`;
defined $youngest && $youngest =~ /^\d+$/
or die "$0: 'svnlook youngest $repos_path' cannot get youngest
revision.\n";
chomp $youngest;
# Do the backup.
system("$svnadmin dump $repos_path --revision $new_startyoungest
--incremental >;>; $dumpfile.tmp" == 0
or die "$0: svnadmin dump to '$dumpfile.tmp' failed.\n";
# Store a new last-dumped revision.
open LASTDUMPED, ">; $last_dumped.tmp"
or die "$0: cannot open '$last_dumped.tmp' for writing: $!\n";
print LASTDUMPED "$youngest\n";
close LASTDUMPED
or die "$0: error in closing '$last_dumped.tmp' for writing:
$!\n";
# Rename to final locations.
rename("$dumpfile.tmp", $dumpfile)
or die "$0: cannot rename '$dumpfile.tmp' to '$dumpfile':
$!\n";
rename("$last_dumped.tmp", $last_dumped)
or die "$0: cannot rename '$last_dumped.tmp' to '$last_dumped':
$!\n";
# All done!
F.有提交,就备份.进入仓库
#mv /hooks/post-commit.tmpl /hooks/post-commit
#vi /hooks/post-commit
添加内容在后面
perl /usr/local/subversion/backup/hot-backup.pl /usr/local/repo/webaddress
/usr/local/subversion/backup/webaddress /var/log/webaddress
每次提交触发一次备份
5.hot-backup.py完整备份
6.tar包完整备份
1.进入仓库的根目录/usrl/local/
#cd /usr/local/
2.备份整个目录.
#tar -cf repo.tar /usr/local/repo.
3.还原时候来到根目录/usrl/local/
#tar -xvf repo.tar
4.也可以备份单个目录.
#tar -cf svn.tar /usr/local/repo/svn.
5.还原单个目录到目录/usr/local/repo/
#tar -xvf svn.tar
6.每天的自动备份脚本backup.sh.放于/usrl/local/subversion/backup目录下
#!/bin/sh
USAGE="Usage:`basename $0` [-f|-d] [files|directories]"
if [ $# -lt 2 ] ; then
echo "$USAGE";
exit 1 ;
fi
case "$1" in
-f) shift
TARGES="-tvf" ;
for i in "$@" ;
do
if [ -f "$i" ] ; then
FILES = `tar $TAGES "$i" 2 >; /dev/null`
if [ $? -eq 0 ] ; then
echo ; echo "$i" ; echo "$FILES"
else
echo "ERRORi not a tar file."
fi
else
echo "ERRORi not a file.";
fi
done
;;
-d) shift
TARGES="-cvf" ;
if [ -f backup.tar ] ; then
mv backup.tar backup1.tar
fi
tar $TARGES backup.tar "$@"
;;
*) echo "$USAGE"
exit 0
;;
esac
exit $?
8.固定时间运行脚本
A.建立运行脚本backup:
20 18 * * * /usr/local/subversion/backup/backup.sh -d /usr/local/repo
B.启用脚本
#crontab backup
#crontab -l 查看运行的脚本
20 18 * * * /usr/local/subversion/backup/backup.sh -d /usr/local/repo
//每日18:20,下班后20分钟
注意:
1.linux直接cp的备份仓库能在nt下使用,但是nt的复制不能在linux下使用.
|
相关推荐
详细介绍Subversion库迁移及备份方案,比直接copy目录文件方式更规范
关于svn数据库备份和恢复一些脚本和资料。
Subversion版本库备份手册,适合初级配置管理员使用
比较祥细地讲解了subversion服务器备份,以及自动备份方面的资料,还有一些使用技巧
Subversion自动备份文件,存放到svn库中,需要修改文件中的路径。
解除和偷窃锁定 锁定交流 外部定义 Peg和实施修订版本 网络模型 请求和响应 客户端凭证缓存 4. 分支与合并 什么是分支? 使用分支 创建分支 在分支上工作 分支背后的关键概念 在分支间复制修改 复制特定的修改 合并...
Subversion Subversion Subversion Subversion Subversion
subversion svnadmin
subversion 安装包与依赖包,以及安装教程,RHEL 6x、7x上测试通过
Subversion Edge详细安装与使用手册,包括3.1版本的而详细安装说明以及建库,权限配置说明
Subversion与CVS的比较
Subversion 是一个开源的版本控制系统 Subversion 可以帮助我们管理文件、目录及随着时间的推移对它们的修改 通过Subversion我们可以恢复数据之前的版本或者查看数据的修改历史
Subversion,快速入门教程,本文是使用Subversion最快速的教程,在最短的时间里帮助您建立起一套可用的服务器环境,只需略加调整就可以应用到实际项目当中。
本文介绍了在linux下快速配置Subversion并使用它做版本控制的一种方案。该文还包括一种权限管理策略、版本库备份和恢复的方案。
ubuntu下Subversion-1.9.4安装与配置,图文描述
subversion安装
Subversion服务器程序,版本控制器 服务端
Subversion1.7.5
subversion客户端subversion客户端最新
SubVersion用法ppt详解