本文引用于http://blog.chinaunix.net/uid-25266990-id-3369172.html

之前对Subversion服务器作了迁移,关于SVN的架构也走了调整,有单一的服务器改为主从备份的方式。在“subversion迁移过程中增量备份脚本”中提到了增量备份的方式,但是运行一段时间,发现备份出错,提示导入的文件已存在,于是重新检查,修改了脚本。现在一直稳定运行着。

今天重新回顾,发现了之前文章很多错误的地方,对文章作了更新,附上Subsection 全量和增量备份脚本。
    
OS:RHEL 5.4
主:192.168.0.1
从:192.168.0.2
Subversion版本:svn, version 1.6.6 (r40053)
版本库:mysvn

全量备份:

天之前的备份文件。

  1. #!/bin/bash
  2. #function:SVN全量备份
  3. #Author: 志在千裏 2012-4-30
  4. svn_repos="/home/svn/mysvn" #版本库目录
  5. backup_dir="/home/svn/backup" #备份目录
  6. next_backup_file="week_incremental_backup".`date %Y%m%d`
  7. log="$backup_dir/week_backed_up.log" #日志文件
  8. echo "********************"`date`"***************">> $log
  9. echo "SVN ALL DUMP start!">> $log
  10. last_rev="`/usr/local/subversion/bin/svnlook youngest $svn_repos`" #最新版本
  11. if [ -f $next_backup_file ];then
  12. echo "No new revisions to backup."
  13. exit 0
  14. else
  15. /usr/local/subversion/bin/svnadmin dump --incremental --revision 0:$last_rev $svn_repos > $backup_dir/$next_backup_file #0版本,到最新版本的全量备份
  16. fi
  17. echo "Last:$last_rev">> $log #记录版本库最新版本
  18. #删除30天之前的备份数据
  19. find $backup_dir -type f -mtime +30  -exec rm -rf {} \; | tee -a $log
  20. echo "********************"`date`"***************">>$log

那么如何还原呢?

  1. /usr/local/subversion/bin/svnadmin load /home/svn/mysvn 备份文件

增量备份:

较昨天记录最后版本,导出新增的版本,使用load 将每日增量备份导入备份服务器。

说明:nfs降远程文件系统挂载到主服务器,方便本地备份和传输

1、主服务器增量备份时间要比从服务器增量导入时间较前,保证增量备份已完成。

2、备份起点在上一次备份最新版本+1个后开始备份,删除前一天的增量备份文件。

备份:

  1. #!/bin/bash
  2. #function:SVN增量备份
  3. #Author: 志在千裏 2012-4-30
  4. svn_repos="/home/svn/mysvn"  #版本库
  5. backup_dir="/mnt/svnaddevreyday" #nfs挂载从服务器192.168.0.2的目录
  6. next_backup_file="add_incremental_backup".`date %Y%m%d`  #增量备份文件
  7. log="$backup_dir/last_add_backed_up.log"   #日志文件
  8. repo="$backup_dir/svn.txt"   #记录版本库最新版本
  9. echo "********************"`date`"***************">> $log
  10. echo "SVN ADD DUMP start!">> $log
  11. first_rev="`cat $repo`"  #备份起点
  12. last_rev="`/usr/local/subversion/bin/svnlook youngest $svn_repos`" #注服务器版本库最新版本
  13. slave_rev="`cat $backup_dir/slave.txt`"  #从服务器提供的校验版本

    if [ $first_rev  -ne $slave_rev ];then

  14. echo "SVN Slaves is error, please check. " | mail -s "SVN slave is ERROR! first_rev !== slave_rev"   linlianpengit@sina.com    #主服务器备份起点版本和从数据最后版本不一致,则邮件报警

    else

  15. /usr/local/subversion/bin/svnadmin dump --incremental --revision $first_rev:$last_rev $svn_repos > $backup_dir/$next_backup_file  #上一次记录的版本,到最新版本的增量备份
  16. fi
  17. echo "Fist:$first_rev">> $log
  18. echo "Last:$last_rev">> $log #写入日志文件
  19. dump_rev=$(($last_rev 1)) #下一次备份起点,重点 +1版本,否则报错
  20. echo "$dump_rev">$repo  #覆盖上一次备份起点
  21. #删除之前的增量备份文件
  22. rm -rf $backup_dir/add_incremental_backup.$(date %Y%m%d --date='1 days ago')

从服务:

导入增量数据:

  1. #!/bin/bash
  2. #function:SVN增量导入
  3. #Author: 志在千裏 2012-4-30
  4. svn_repos="/home/svn/mysvn" #从服务器192.168.0.2版本库目录
  5. backup_dir="/home/svn/svnaddevreyday" #nfs远程共享主服务器192.168.0.1目录
  6. log="$backup_dir/last_load.log" #日志文件
  7. echo "********************"`date`"***************">> $log
  8. echo "SVN load start!">> $log
  9. first_rev="`/usr/local/subversion/bin/svnlook youngest $svn_repos`"
  10. echo "First:$first_rev">> $log
  11. /usr/local/subversion/bin/svnadmin load $svn_repos </home/svn/svnaddevreyday/add_incremental_backup.* 2>&1 >>$log #导入增量备份文件
  12. last_rev="`/usr/local/subversion/bin/svnlook youngest $svn_repos`"
  13. echo "Last:$last_rev">> $log #记录最新版本号
  14. repo_slave=$(($last_rev+1)) #作为检测主服务器和从服务器数据是否同步的判断数据
  15. echo "$repo_slave">/home/svn/svnaddevreyday/slave.txt
  16. echo "********************"`date`"***************">>$log
  17. #删除增量备份文件
  18. rm -rf /home/svn/svnaddevreyday/add_incremental_backup.*
  19. echo "SVN load Eed!">> $log

关于Subversion主从备份方式的调整(全量、增量脚本)更新的更多相关文章

  1. Mysql备份系列(3)--innobackupex备份mysql大数据(全量+增量)操作记录

    在日常的linux运维工作中,大数据量备份与还原,始终是个难点.关于mysql的备份和恢复,比较传统的是用mysqldump工具,今天这里推荐另一个备份工具innobackupex.innobacku ...

  2. Mysql备份系列(4)--lvm-snapshot备份mysql数据(全量+增量)操作记录

    Mysql最常用的三种备份工具分别是mysqldump.Xtrabackup(innobackupex工具).lvm-snapshot快照.前面分别介绍了:Mysql备份系列(1)--备份方案总结性梳 ...

  3. 【MySQL】全量+增量的备份/恢复

    生产环境中,有时需要做MySQL的备份和恢复工作.因MySQL是在运行过程中的,做全量备份需要时间,全量备份完成后又有数据变动,此时需要增量备份辅助.如果想恢复数据到一个空库(例如数据迁移或者上云等更 ...

  4. Mysql备份系列(2)--mysqldump备份(全量+增量)方案操作记录

    在日常运维工作中,对mysql数据库的备份是万分重要的,以防在数据库表丢失或损坏情况出现,可以及时恢复数据. 线上数据库备份场景:每周日执行一次全量备份,然后每天下午1点执行MySQLdump增量备份 ...

  5. Elasticsearch 索引的全量/增量更新

    Elasticsearch 索引的全量/增量更新 当你的es 索引数据从mysql 全量导入之后,如何根据其他客户端改变索引数据源带来的变动来更新 es 索引数据呢. 首先用 Python 全量生成 ...

  6. innobackupex在线备份及恢复(全量和增量)

    Xtrabackup是由percona开发的一个开源软件,它是innodb热备工具ibbackup(收费的商业软件)的一个开源替代品.Xtrabackup由个部分组成:xtrabackup和innob ...

  7. [MySQL] innobackupex在线备份及恢复(全量和增量)

    安装percona-xtrabackup 方法1: percona-xtrabackup-2.1.9-744-Linux-x86_64.tar.gz(D:\share\src\linux-mysql) ...

  8. Xtrabackup全量 增量备份详解

    xtrabackup是Percona公司CTO Vadim参与开发的一款基于InnoDB的在线热备工具,具有开源,免费,支持在线热备,备份恢复速度快,占用磁盘空间小等特点,并且支持不同情况下的多种备份 ...

  9. Hbase实用技巧:全量+增量数据的迁移方法

    摘要:本文介绍了一种Hbase迁移的方法,可以在一些特定场景下运用. 背景 在Hbase使用过程中,使用的Hbase集群经常会因为某些原因需要数据迁移.大多数情况下,可以跟用户协商用离线的方式进行迁移 ...

随机推荐

  1. luogu p1003

    P1003 题意 经过多个矩形(1e3)覆盖后后某个坐标属于那个矩形(仅仅是一次询问) 大水题,直接的做法,从后向前处理矩形是否覆盖查询的点,若覆盖,则是该矩形编号 题解 int get_num(){ ...

  2. django-2-路由配置及渲染方式

    <<<视图>>> (1)首先要注册创建好的app (2)配置路由 在app目录下新建一个urls.py模块 模块里面复制myproject目录下urls.py里面的 ...

  3. jquery获得url的get参数

    只是用了第一种方法,简单好用直接传入想要获取的参数名,即可返回参数值 function GetQueryString(name) {      var reg = new RegExp("( ...

  4. mybatis插入操作时,返回自增主键id

    mapper.xml 代码 <insert id="insert" parameterType="com.Student" > <select ...

  5. angular-Then的用法

    then怎么使用(主要是如何从中提取出我们需要的后台返回的数据):then(fn) 方法中带一个参数,这个参数就是要被执行的函数,并且,这个作为参数的函数本身有一个参数,这个参数就是我们需要的数据,这 ...

  6. [AngularJS]Chapter 4 AngularJS程序案例分析

    前边讲的都是基础.本章看看他们怎么合作的. 我们要建一个程序.一次一步.章末结束 [这个程序] GutHub是一个简单的菜谱管理程序.功能是存好吃的的菜谱并提供步骤.这个程序包含: 两列布局 左边是导 ...

  7. 宿主机mac os无法连接到虚拟机centos

    宿主机: Mac OS 10.9.2 虚拟机: [root@localhost ~]# cat /etc/redhat-release CentOS release 6.4 (Final) [root ...

  8. AutoCompleteTextView和Spinner的使用方法

    首先说明AutoCompleteTextView的使用方法.主要是起到自己主动填充的作用.输入keyword,假设存在该字便能够自己主动填充.代码例如以下 activity_main.xml < ...

  9. nyoj--84--阶乘的0(数学技巧)

    阶乘的0 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 计算n!的十进制表示最后有多少个0 输入 第一行输入一个整数N表示测试数据的组数(1<=N<=100 ...

  10. javascript系列-class10.DOM(下)

    1.node节点(更详细的获取(设置)页面中所有的内容)         根据 W3C 的 HTML DOM 标准,HTML 文档中的所有内容都是节点:   元素是节点的别称,节点包含元素当然节点还有 ...