svn实现增量备份的脚本及SVN备份问题的解决方法

发布时间:2020-02-01编辑:脚本学堂
本文介绍下,在linux中,使用svn进行增量备份的脚本,以及svn备份问题的相关解决方法。有需要的朋友,参考下吧。

安装完svn后,做如下操作:
 

复制代码 代码示例:
rm -rf /usr/bin/svnadmin
rm -rf /usr/sbin/svnadmin
rm -rf /usr/bin/svnlook
rm -rf /usr/sbin/svnlook
ln -s /usr/local/svn/bin/svnadmin /usr/bin/svnadmin
ln -s /usr/local/svn/bin/svnadmin /usr/sbin/svnadmin
ln -s /usr/local/svn/bin/svnlook /usr/bin/svnlook
ln -s /usr/local/svn/bin/svnlook /usr/sbin/svnlook

svnadmin svnlook 需要写入 /usr/bin 直接调用。

1,文件 svnbak.sh
 

复制代码 代码示例:

#!/bin/ksh

PROJECT_PATH=/svn-bak
INDEX_FILE=index.txt

BEGIN=`cat $INDEX_FILE`
ENDNO=`svnlook youngest $PROJECT_PATH`

FILENAME=svn-bak_$BEGIN-$ENDNO.dmp
svnadmin dump $PROJECT_PATH -r $BEGIN:$ENDNO --incremental >$FILENAME
gzip $FILENAME

#NUMNO=`echo "$NUMNO + 1"|bc`
ENDNO=`expr $ENDNO + 1`
echo $ENDNO > $INDEX_FILE

2,真实文件中的备份脚本
 

复制代码 代码示例:

#!/bin/ksh

PROJECT_PATH=/home/svn
INDEX_FILE=/home/svnbak/index.txt

BEGIN=`cat $INDEX_FILE`
ENDNO=`svnlook youngest $PROJECT_PATH`

FILENAME=svn-bak_$BEGIN-$ENDNO.dmp
svnadmin dump $PROJECT_PATH -r $BEGIN:$ENDNO --incremental >/home/svnbak/$FILENAME
gzip /home/svnbak/$FILENAME
# tar zcf tar.gz mei you gzip hao
# gzip -d *.gz he gzip yasuo he jieya

#NUMNO=`echo "$NUMNO + 1"|bc`
ENDNO=`expr $ENDNO + 1`
echo $ENDNO > $INDEX_FILE

加其它用户的可执行权限:
 

复制代码 代码示例:
chmod o+x svnbak.sh

问题:
 

复制代码 代码示例:
./svnbak.sh
svnadmin: Try 'svnadmin help' for more info
svnadmin: Revisions must not be greater than the youngest revision (7)
 

解决:
修改 index.txt 里的版本号为 1 然后重新执行 将从版本1开始做备份。

备份 : 每天都做增量备份
 

复制代码 代码示例:
./svnbak.sh

恢复 : 将这些备份 一个一个的导入SVN库里
 

复制代码 代码示例:
gzip -d svn-bak_1-8.dmp.gz
gzip -d svn-bak_9-9.dmp.gz
svnadmin load /home/svn3 < svn-bak_1-8.dmp
svnadmin load /home/svn3 < svn-bak_9-9.dmp
等 ...

通过测试
 

复制代码 代码示例:

[root@jbxue svnbak]# ls
index.txt  svnbak.sh
[root@jbxue svnbak]# echo 0 > index.txt
[root@jbxue svnbak]# ./svnbak.sh
* Dumped revision 0.
* Dumped revision 1.
* Dumped revision 2.
* Dumped revision 3.
* Dumped revision 4.
* Dumped revision 5.
* Dumped revision 6.
* Dumped revision 7.
* Dumped revision 8.
* Dumped revision 9.
[root@jbxue svnbak]# ./svnbak.sh
* Dumped revision 10.
[root@jbxue svnbak]# ls
index.txt  svnbak.sh  svn-bak_0-9.dmp.gz  svn-bak_10-10.dmp.gz

[root@jbxue svnbak]# ll
total 24
-rw-r--r-- 1 root root    3 May 12 06:05 index.txt
-rwxrwxrwx 1 root root  364 May 12 05:57 svnbak.sh
-rw-r--r-- 1 root root  745 May 12 06:05 svn-bak_0-9.dmp.gz
-rw-r--r-- 1 root root  386 May 12 06:05 svn-bak_10-10.dmp.gz

[root@jbxue svnbak]# gzip -d svn-bak_1-8.dmp.gz
[root@jbxue svnbak]# gzip -d svn-bak_9-9.dmp.gz
[root@jbxue svnbak]# svnadmin load /home/svn3 < svn-bak_0-9.dmp
[root@jbxue svnbak]# svnadmin load /home/svn3 < svn-bak_10-10.dmp

gzip 参数信息
 

-c,--stdout 将解压缩的内容输出到标准输出,原文件保持不变
-d,--decompress 解压缩
-f,--force 强制覆盖旧文件
-l,--list 列出压缩包内储存的原始文件的信息(如,解压后的名字、压缩率等)
-n,--no-name 压缩时不保存原始文件的文件名和时间戳,解压缩时不恢复原始文件的文件名和时间戳(此时,解出来的文件,其文件名为压缩包的文件名)
-N,--name 压缩时保存原始文件的文件名和时间戳,解压缩时恢复原始文件的文件名和时间戳
-q,--quiet 抑制所有警告信息
-r,--recursive 递归
-t,--test 测试压缩文件完整性
-v,--verbose 冗余模式(即显示每一步的执行内容)
-1、-2、...、-9 压缩率依次增大,速度依次减慢,默认为-6

计划任务
1,保证 crond 进程是开启的 ps -aux | grep cond
2,写入计划任务
 

复制代码 代码示例:
crontab -e
i0 9 * * * sh /home/svnbak/svnbak.sh
 

每天 09:00 执行 备份脚本

就介绍这些吧,希望有助于大家理解svn进行增量备份的方法。
脚本学堂,祝大家学习进步。