svnadmin hotcopy整库拷贝方式(转载)

svnadmin hotcopy是将整个库都“热”拷贝一份出来,包括库的钩子脚本、配置文件等;任何时候运行这个脚本都得到一个版本库的安全拷贝,不管是否有其他进程正在使用版本库。
因此这是俺青睐的备份方式。

1)定义备份策略

备份频度:每天进行一次全量备份,
备份地点:备份目录以日期命名,备份路径到 /home/backup/svn/${mmdd}
备份保留时期:保留10天到15天,超过15天的进行删除。
备份时间:每晚21点开始
备份检查:备份完毕后自动运行检查脚本、自动发送报告。

2)建立备份脚本
在自己home目录 ~/下创建一个文件,backup.sh:

#!/bin/bash
SRCPATH=/home/svn/repos/; #定义仓库parent路径
DISTPATH=/home/backup/svn/`date +%m%d`/ ; #定义存放路径;
if [ -d "$DISTPATH" ]
then
else
mkdir $DISTPATH
chmod g+s $DISTPATH
fi
echo $DISTPATH
svnadmin hotcopy $SRCPATH/Project1 $DISTPATH/Project1 >/home/backup/svn/cpreport.log 2>&1;
svnadmin hotcopy $SRCPATH/Project2 $DISTPATH/Project2
cp $SRCPATH/access 

  $DISTPATH; #备份access文件
cp $SRCPATH/passwd   $DISTPATH; #备份passwd文件
perl /home/backup/svn/backup_check.pl #运行检查脚本
perl /home/backup/svn/deletDir.pl   #运行删除脚本,对过期备份进行删除。

3)建立检查脚本
在上面指定的地方/home/backup/svn/下建立一个perl脚本:backup_check.pl
备份完整性检查的思路是:对备份的库运行 svnlook youngest,如果能正确打印出最新的版本号,则表明备份文件没有缺失;如果运行报错,则说明备份不完整。我试过如果备份中断,则运行svnlook youngest会出错。
perl脚本代码如下:

#! /usr/bin/perl
## Author:xuejiang
## 2007-11-10
## http://www.scmbbs.com
use strict;
use Carp;
use Net::SMTP;

#### defined the var #######

my $smtp =Net::SMTP->new('mail.scmbbs.com', Timeout => 30, Debug => 0)|| die "cann't connect to mail.scmbbs.comn";

my $bkrepos="/home/backup/svn/".&get_day;#定义备份路径
my $ssrepos="http://www.scmbbs.com/repos";#定义仓库url
my @repos = ("project1","project2");

my $title="echo "如下是昨晚备份结果与真实库对比的情况,如果给出备份版本数,则表示备份成功;如果给报错信息或没有备份版本数,则表示备份失败:" >./report";
system $title   || die "exec failedn";
foreach my $myrepos(@repos)
{
my $bkrepos1=$bkrepos."/".$myrepos;
my $ssrepos1=$ssrepos."/".$myrepos;
my $svnlookbk1 = "echo "$myrepos 昨晚备份的版本是:">>./report;svnlook youngest ".$bkrepos1." >> ./report 2>&1";
my $svnlookss1 = "echo "$myrepos 真实库中的最新版本及最后修改时间是:">>./report;svn log -r'HEAD' ".$ssrepos1." >> ./report 2>&1";
system $svnlookbk1 || die "exec failedn";
system $svnlookss1 || die "exec failedn";

}

my $body    ="echo "=========================================================================" >>./report";
my $bottom     ="echo "备份位置:来自http://www.scmbbs.com的".$bkrepos."" >>./report";

system $body    || die "exec failedn";
system $bottom     || die "exec failedn";


###### report the result ####


open(SESAME,"./report")|| die "can not open ./report";
my @svnnews = ;
close(SESAME);
foreach my $line1 (@svnnews)
{
print $line1."n";
}

my @email_addresses =("scm@list.scmbbs.com","leader1@scmbbs.com","leader2@scmbbs.com");
my $to              = join(', ', @email_addresses);
$smtp->mail("scm@scmbbs.com");
$smtp->recipient(@email_addresses);
$smtp->data();
$smtp->datasend("To:$to\n"); 
$smtp->datasend("From: svnReport@scmbbs.comn");
$smtp->datasend("Subject:svn备份检查报告".&get_today."n");
$smtp->datasend("Reply-to:scm@scmbbs.comn");
$smtp->datasend("@svnnews");
$smtp->dataend();
$smtp->quit;


#############


sub get_today
{
my( $sec, $min, $hour, $day, $month, $year ) = localtime( time() );
$year += 1900;
$month++;
my $today = sprintf( "%04d%02d%02d", $year, $month, $day);
return $today;
}
sub get_day
{
my( $sec, $min, $hour, $day, $month, $year ) = localtime( time() );
$year += 1900;
$month++;
my $today = sprintf( "%02d%02d", $month, $day);
return $today;
}


4)定义删除脚本

由于是全量备份,所以备份不宜保留太多,只需要保留最近10来天的即可,对于超过15天历史的备份基本可以删除了。
在/home/backup/svn/下建立一个perl脚本:deletDir.pl
(注意,删除svn备份库可不像删除普通文件那么简单)
脚本代码请参看我的另一个帖子:http://www.scmbbs.com/cn/systp/2007/12/systp6.php

5)修改/etc/crontab 文件
在该文件中指定每晚21点执行“backup.sh”脚本。

http://blog.chinaunix.net/uid-305417-id-2133668.html

=======================

因为有些svnadmin命令(例如svnadmin hotcopy --incremental  ;svanadmin pack),只能用于FSFS格式库文件。需要知道当前库的文件格式是什么。

例如:Subversion(SVN)备份问题(用 svnadmin hotcopy 支持增量备份) https://www.cnblogs.com/johnphan/p/9282662.html

使用 svnadmin info 命令可以查看库文件的格式设置。

要注意的是,更新日志上说1.9.0版本才支持这个功能,

Version 1.9.0
(5 Aug 2015, from /branches/1.9.x)
http://svn.apache.org/repos/asf/subversion/tags/1.9.0
    * svnadmin info: new subcommand to print info about a repository

使用例子:

E:\Repositories>svnadmin info aa
Path: aa
UUID: 7896e1b3-c25b-dc44-bc7b-5e1bd20f2010
Repository Format: 5
Compatible With Version: 1.8.0
Repository Capability: mergeinfo
Filesystem Type: fsfs
Filesystem Format: 6
FSFS Sharded: yes
FSFS Shard Size: 1000
FSFS Shards Packed: 0/0
FSFS Logical Addressing: no
Configuration File: aa\db\fsfs.conf

(上面最后一行,提示不使用这个命令,在相应的目录下,看到文件名: fsfs.conf,也可以做出判断出来当前SVN库的文件类型是fsfs。这也许是最原始的方法。)

=====================================================================

SVN备份方法:

  • 直接备份SVN的Pepositories文件,应该是最不好的方法,需要停止Subversion服务。不然,可能出问题。
  • 用命令svnadmin Dump&Load备份的方法,只能备份数据部分,无法备份SVN的权限设置、hook脚本等数据。但可以选择备份数据库的一部分数据,也实现可增量备份。
  • 备份SVN 的最好方法,是用 svnadmin hotcopy 备份的方法,第一次要全部备份(耗时巨长);以后的每次备份,用 svnadmin hotcopy --incremental 选项,每次增量备份,速度飞快。

但是,svnadmin hotcopy 这种备份方法无法备份 SVN 或 VisualSVN 的配置数据,包括:用户信息、分组分组、用户权限分配、用户设置的密码,这几个文件还是手工备份一下吧!

注意:这个增量备份的选项,仅仅在库文件是 FSFS 格式才可用。当然,一般SVN都是用这种格式。

参考资料:

查看已经创建的svn库是 FSFS 还是 VDFS 的

网络(中文)上许多地方都说 svnadmin hotcopy 不能增量备份!

查看Subversion的升级日志,早在2013年 svnadmin hotcopy 就支持增量备份了。

日志摘录:

 Version 1.8.0

(18 Jun 2013, from /branches/1.8.x)
* new 'svnadmin hotcopy --incremental' support for FSFS (issue #3815)

https://svn.apache.org/repos/asf/subversion/trunk/CHANGES

 

网络上有资料说,每次增量备份可以是这样:

svnadmin verify %repopath%

svnadmin pack %repopath%

svnadmin hotcopy %repopath% %backupdir% --incremental

网摘一段参考文字:http://subversion.apache.org/docs/release-notes/1.8.html#incremental-hotcopy

the svnadmin hotcopy command now supports incremental operation, triggered by the new --incremental option.

In prior releases of Subversion, svnadmin hotcopy refused to copy over an existing destination repository, and always copied the entire repository. For large repositories, performing a hotcopy could take several hours, preventing an efficient backup process.

In incremental hotcopy mode, revision data which has already been copied from the source to the destination repository will not be copied again. svnadmin hotcopy --incremental will only copy new revisions, and revisions which have changed in size or had their modification time stamp changed since the previous hotcopy operation.

Up to now, svnsync or svnadmin dump --incremental were the only alternatives for incremental repository backup. However, these commands need to perform additional processing while transforming revision data into an intermediate format before creating revision files in the destination repository. Performance of svnadmin hotcopy is only limited by disk I/O.

Incremental hotcopy is not supported for BDB repositories. See issue 4081 for more information.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可网页添加账号和控制,下面是安装心得 1.到http://phpstudy.net/download.html下载JspStudy JSP环境一键安装包,解压,进行安装,安装好后,选择其他选项菜单-JspStudy 设置-端口常规设置,进入后全做修改PHP目录需先分开解析,选择 分开解析 点应用 2.安装Setup-Subversion-1.8.17 安装时候选择Apache 2.4.X 3.安装C++ 否者修改下面数据后重启JspStudy-Apache程序会启动不了 安装C++需要重启电脑 4.进入Subversion安装目录\Subversion\bin\ 把 mod_authz_svn.so和mod_dav_svn.so 拷贝到 JspStudy\Apache\modules 目录下 5.进入Subversion安装目录\Subversion\bin\ 把 libsvn_delta-1.dll libsvn_fs-1.dll libsvn_repos-1.dll libsvn_subr-1.dll 拷贝到 JspStudy\Apache\bin 目录下 6.修改JspStudy\Apache\conf\httpd.conf文件 查找LoadModule dav_module modules/mod_dav.so把前面#号取消掉 查找LoadModule dav_fs_module modules/mod_dav_fs.so把前面#号取消掉 添加LoadModule dav_svn_module modules/mod_dav_svn.so 添加LoadModule authz_svn_module modules/mod_authz_svn.so 如果安装svnadmin-3.0.5在最下面添加 <Location /svn/> DAV svn SVNListParentPath on SVNParentPath D:/svn AuthType Basic AuthName "Subversion repositories" AuthUserFile D:/svn/passwd.http AuthzSVNAccessFile D:/svn/authz Require valid-user </Location> RedirectMatch ^(/svn)$ $1/ 7.解压svnadmin-3.0.5.zip将svnadmin.war 移动到JspStudy\tomcat\webapps 8.启动tomcat,让tomcat自行解压war包,然后编辑数据配置文件的#mysql段,使其可以正常连接数据 JspStudy\tomcat\webapps\svnadmin\WEB-INF\jdbc.properties #MySQL MySQL.jdbc.driver=com.mysql.jdbc.Driver MySQL.jdbc.url=jdbc:mysql://127.0.0.1:3306/svnadmin?characterEncoding=utf-8 MySQL.jdbc.username=root MySQL.jdbc.password=root 9.把phpMyAdmin解压到\JspStudy\phproot目录下 9.1.mysql创建svnadmin导入svnadmin项目mysql数据和语言包 mysql5.sql lang/en.sql 10.创建SVN svnadmin create d:\svn\test 12.访问127.0.0.1:8080/svnadmin 用户名和密码是admin 进入后生成一个用户赐予用户test数据的读写权限 11.访问127.0.0.1能看见

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值