一直以来是用rsync来备份svn,最近恢复了一个2009年的SVN的备份。突然想还是用svnadmin dump 备份出来比较方便(这也是官方推崇备份方式,恢复起来有点慢),好管理。决定用perl 来实现(因为最近在学习perl):
   备份的思路就是首先读取一个项目,然后全备,并且把版本写入到一个文件,差异备份脚本备份时读取这个文件的中的版本号,如果版本号不同,则备份。
全备份脚本:
svn_full_backup.pl

#!/usr/bin/perl -w
use POSIX qw(strftime);
my $SVN_BACKUP="/www/svn_backup"; ###备份路径

open (FILE,"/usr/local/script/svn_backup/project.log") ||die"can not open the file: $!"; ####读取要备份的项目,好多,这个是手工学进去的。
while (defined ($MYPROJECT=<FILE>)){
  chomp ($MYPROJECT);
  my $SVN_REPOS="/home/svn/$MYPROJECT";
  my $YOUNGEST=`/usr/bin/svnlook youngest $SVN_REPOS`;
  my $mytime=strftime("%Y-%m-%d",localtime); ####取得系统当前时间
  my $svn_backup_shell="/usr/bin/svnadmin dump --incremental  $SVN_REPOS | gzip > $SVN_BACKUP/$MYPROJECT.dump.$mytime.gz";
  `$svn_backup_shell`;
  open(LOG,">$SVN_BACKUP/backuplist/$MYPROJECT"); ###写入最新版本号
  print LOG $YOUNGEST;
  close LOG;
}
close FILE;

差异备份脚本:

svn_incremental_backup.pl

#!/usr/bin/perl -w
use POSIX qw(strftime);
my $SVN_BACKUP="/www/svn_backup";
open (FILE,"/usr/local/shell/svn_backup/project.log") ||die"can not open the file: $!";
while (defined ($MYPROJECT=<FILE>)){
    chomp ($MYPROJECT);
    my $SVN_REPOS="/home/svn/$MYPROJECT";
    my $YOUNGEST=`/usr/bin/svnlook youngest $SVN_REPOS`;
    chomp $YOUNGEST;
    my $mytime=strftime("%Y-%m-%d",localtime);
    #########get full svn version
    open (VERSION,"$SVN_BACKUP/backuplist/$MYPROJECT") || die "can not open the file: $!";
    my $FULL_VERSION=<VERSION>;
    chomp ($FULL_VERSION);
    if ($FULL_VERSION eq $YOUNGEST)
    {
      print "没有新版本需要增量备份!\n";
    }
    else
    {
       my $FRIST_VERSION=$FULL_VERSION + 1;
       my $svn_backup_shell="/usr/bin/svnadmin dump --incremental -r $FRIST_VERSION:$YOUNGEST  $SVN_REPOS | gzip > $SVN_BACKUP/incremental/$MYPROJECT.dump.$mytime.gz"
;
       `$svn_backup_shell`;
    }
  close VERSION;
}
close FILE;

设置cront svn_full_backup.pl 星期天早上跑,svn_incremental_backup.pl 星期一到星期六早上跑即可。

恢复的时候找到最新的一个全备与最新的一个差量备份文件几个恢复。

转载于:https://blog.51cto.com/nessus/351287

用perl 实现 svn 差异备份相关推荐

  1. [SCM]源码管理 - SVN的备份和还原

    转自: http://spiritfrog.iteye.com/blog/448578 + http://magnet2008.iteye.com/blog/586578 备份策略 ========= ...

  2. mysql差异备份与多实例部署

    mysql差异备份与多实例部署 文章目录 差异备份与恢复 mysql多实例部署 差异备份与恢复 差异备份简单来说就是备份自上一次完整备份之后有变化的数据 //开启mysql服务的二进制日志功能 [ro ...

  3. svn服务器备份、还原、迁移一条龙教程

    前言 此处要备份的库名以test为例 目的 当svn服务器发生灾难级故障时,我们可以利用备份文件对公司资产:svn代码进行恢复 面临的现状 整个svn备份文件非常大,如果每次进行都全量备份:将消耗非常 ...

  4. sqlserver定时差异备份_一分钟看懂完全备份、差异备份以及增量备份

    常用的数据备份方式有完全备份.差异备份以及增量备份,那么这三种备份方式有什么区别,在具体应用中又该如何选择呢? 1.备份方式简介 完全备份(Full Backup) 备份全部选中的文件夹,并不依赖文件 ...

  5. 增量备份和差异备份的区别|什么是增量差异备份

    增量备份和差异备份的区别|什么是增量差异备份.增量备份和差异备份incremental backup and differential backup.2者差别是什么啊? 完全备份:备份全部选中的文件夹 ...

  6. MSSQL差异备份取系统权限

    MSSQL差异备份取系统权限 TEAM里的内部资料放久了,现在不放出来,迟早会有人发掘出来的!既然如此就拿出来大家分享吧! MSSQL差异备份获取webshell 几乎人人皆知,那么我们可以利用差异备 ...

  7. SQL Server:日志备份和差异备份还原中的常见问题示例

    日志备份和差异备份还原中的常见问题示例 代码  1 --创建测试  2 CREATE DATABASE db  3 GO  4   5 --正常备份  6 BACKUP DATABASE db TO  ...

  8. linux备份svn仓库脚本,SVN服务备份操作步骤分享

    SVN服务备份操作步骤 1.准备源服务器和目标服务器 源服务器:192.168.1.250 目标服务器:192.168.1.251 root/rootroot 2.对目标服务器(251)装SVN服务器 ...

  9. 差异备份、增量备份、完全备份的区别

    2019独角兽企业重金招聘Python工程师标准>>> 差异备份.增量备份.完全备份的区别 1.当前主流的备份技术 数据备份:       即针对数据进行的备份,直接复制所要存储的数 ...

最新文章

  1. 022_Vue购物车
  2. 微信小程序:开发之前要知道的三件事
  3. comboBox.DataSource绑定
  4. PHP SOAP 教程 实例一
  5. android 判断进程是否处于前台
  6. 用户如何有效地利用数据字典(转)
  7. mysql查询时间段内的数据
  8. Nginx进程以及事件处理模型
  9. [CLR团队公告]CLR基础研究团队,邀请您的加入
  10. Visual C#中用WMI控制远程计算机
  11. BZOJ 1179: [Apio2009]Atm Tar$滑稽 ra$jan
  12. HTML+CSS+JavaScript实现打字小游戏
  13. php168找回管理员密码,如何找回WordPress后台管理员密码
  14. 盘口功夫——研判股价启动前的四种征兆----
  15. c语言解惑 指针 数组 函数和多文件编程,C语言解惑 指针、数组、函数和多文件编程...
  16. 使用FFmpeg将文件转为ts
  17. Facebook一季报解读:未来十年要打造一个怎样的世界?
  18. a1sd测试软件准确,A1 SD Bench测试:手机端限制不少
  19. STM32全链路开发实战教程专栏总目录(2022.10.19更新)
  20. 毕业设计选题推荐 - python毕设选题推荐 - 2023最新毕设选题 - 如何选题 避免被坑

热门文章

  1. jquery插件课程2 放大镜、多文件上传和在线编辑器插件如何使用
  2. 作用域和闭包的通俗理解
  3. 利用shell监控cpu、磁盘、内存使用率
  4. JQuery全选/反选设置
  5. 基础才是重中之重~用好configSections让配置信息更规范
  6. CSS选择器(转载)
  7. java获取当前日期时间代码
  8. 【php】目录操作 文件操作
  9. Struts2 Result详解
  10. Struts2+Hibernate分页显示实例