SVN服务器异地备份及恢复(Windows)

2024-06-06 23:32

本文主要是介绍SVN服务器异地备份及恢复(Windows),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

SVN服务器异地备份及恢复(Windows)

一、      备份策略

备份频度:每周六进行一次全量备份,每天进行增量备份;
备份地点:备份存储路径为另外一台机器的文件夹下面(异地备份),备份目录以日期命名D:\svnserver_all_backup\2014-08-14\

备份保留时期:保留10天到15天,超过15天的进行删除。
备份时间:每晚凌晨1点开始,定时备份
备份检查:每月末进行svnadmin load恢复试验。

二、     完全备份

最常见和简单的备份就是直接使用拷贝命令,将版本库目录拷贝到备份目录上,就可以了。但是这样不是很安全的方式,因为如果在拷贝时版本库发生变化,将会造成备份的结果不够准确,失去备份的作用,为此Subversion提供了“svnadmin hotcopy”命令,可以防止这种问题。

一般情况下有许多版本库,如果通过需要为每个版本库写这样一条语句备份比较麻烦,为此写了下面的脚本,实现备份一个目录下的所有版本库。

共包含两个文件hotcopy.bat和最终执行文件fullbackup.bat,放在仓库的父目录下如G:\Repositories下,具体脚本如下:

1)   hotcopy.bat

@echo 正在备份版本库%1......

@%SVN_HOME%\bin\svnadmin hotcopy %1 %BACKUP_DIRECTORY%\%2

@echo 版本库%1成功备份到了%2!

 

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

2)   fullbackup.bat(最终执行文件)

因为个人需要采用是异地备份,因此需要提前设置,具体情况如下:

Ø 基本情况:为了将配置服务器(简称A)上备份的程序另外备份至其它服务器(简称B,IP为172.17.x.x)。

Ø 在B服务器上操作:

 1、在B服务器上先建立一个存放备份的文件夹,如13svnserver_all_backup;

2、将该文件夹(13svnserver_all_backup)设置为共享,并且将权限全部开放;

Ø 在A服务器上操作: 

3、在A服务器上某盘先建立一个快捷方式,然后在当中输入B的IP地址与备份的文件夹(如:\\172.17.x.x\13svnserver_all_backup)。会弹出需要输入5服务器的密码的提示框,输入信息后,勾选“记住密码”

4、将备份所用的脚本进行相关修改,并当中备份的目录地址写上B服务器上保存的地址,如下图当中红字部份。

注意1:windows下一定使用\,否则会报出错误“svnadmin: E720003: Can't createdirectory 'G:\svnrootback\2014-08-13\project':”系统找不到指定的路径。

 

注意2:在使用的时候,只需要修改fullbackup.bat开头的三个路径,根据以上的配置,你只需要运行fullbackup.bat,就可以把“SVN_ROOT”下的版本库都备份到“BACKUP_SVN_ROOT”里,并且存放在备份所在的目录里,例如“D:\13svnserver_all_backup \2014-08-14”。

@echo off

rem Subversion的安装目录

set SVN_HOME="C:\Program Files\VisualSVN Server"

rem 所有版本库的父目录

set SVN_ROOT=F:\Repositories

rem 备份的目录

set BACKUP_SVN_ROOT=\\172.17.x.x\13svnserver_all_backup

rem set BACKUP_SVN_ROOT=\\172.17.x.x\13svnserver_all_backup

set BACKUP_DIRECTORY=%BACKUP_SVN_ROOT%\%date:~0,10%

if exist %BACKUP_DIRECTORY% goto checkBack

echo %BACKUP_DIRECTORY%>>%SVN_ROOT%/fullbackup.log

mkdir %BACKUP_DIRECTORY%

rem 验证目录是否为版本库,如果是则取出名称备份

for /r %SVN_ROOT% %%I in (.) do @if exist "%%I\conf\svnserve.conf" %SVN_ROOT%\hotcopy.bat "%%~fI" %%~nI

goto end

:checkBack

@echo 备份目录%BACKUP_DIRECTORY%已经存在,请清空。

goto end

:end

 

三、     增量备份(暂时没做)

主要包含三个文件:dump.bat、最终执行文件svndump.bat和配置库名称配置projectlist.conf;

备份步骤:1、备份脚本svndump.bat通过读取projectlist.conf(存放要备份的库的名称)的数据来依次对库进行备份(全部或增量,此地方主要用于增量备份) 

2、增量备份会往备份日志中增加记录

注意:需要把dump.batlog.conf,projectlist.conf存放在备份文件存放的目录(如本例的:z: \\SVN_backup_AF.12.03 

1)        dump.bat

---------------------------------------------------------------------------------------------

@ECHO OFF

rem 调用格式:dump 项目库名

if "%1"=="" goto no_args

set PROJECT=%1

if not exist %RAR_STORE%\%PROJECT% mkdir %RAR_STORE%\%PROJECT%

cd %RAR_STORE%\%PROJECT%

SET LOWER=0

SET UPPER=0

 

@echo 项目库%PROJECT%2...>> %Log_PATH%\%PROJECT%_log.txt

%SVN_LOOK% youngest %SVN_REPOROOT%\%PROJECT%> %Log_PATH%\A.TMP

@echo 项目库%PROJECT%3...>> %Log_PATH%\%PROJECT%_log.txt

@FOR /f %%D IN (%Log_PATH%\A.TMP) DO set UPPER=%%D

if %UPPER%==0 GOTO :N_EXIT

if not exist %Log_PATH%\%PROJECT%_last_revision.txt GOTO :BAKUP

rem 取出上次备份后的版本号,并做+1处理(注意此算法未在98系统验证)

@FOR /f %%C IN (%Log_PATH%\%PROJECT%_last_revision.txt) DO @setLOWER=%%C

@set /A LOWER=%LOWER%+1

rem 不需要备份,则跳转结束

IF %LOWER% gtr %UPPER% GOTO :N_EXIT

 

:BAKUP

SET FILENAME=%PROJECT%_%LOWER%_%UPPER%

@ECHO 开始备份项目库:%PROJECT%,生成文件=%FILENAME%

%SVN_ADMIN% dump %SVN_REPOROOT%\%PROJECT% -r %LOWER%:head--incremental >%FILENAME%.dmp

rem %RAR_CMD% a -df %PROJECT%_%UPPER%.rar %

rem 准备写备份日志信息

IF %LOWER% gtr 0 GOTO :WRITENOTE

@ECHO ------2-----%date% >> %Log_PATH%\%PROJECT%_log.txt

@echo -- 3-------添加备份文件 %PROJECT%_%UPPER%.rar,从[%LOWER%]到[%UPPER%] >> %Log_PATH%\%PROJECT%_log.txt

GOTO :COMPLETE

 

:WRITENOTE

@ECHO %date% >> %Log_PATH%\%PROJECT%_log.txt

@echo -- 4------添加增量备份文件 %PROJECT%_%UPPER%.rar,从[%LOWER%]到[%UPPER%] >> %Log_PATH%\%PROJECT%_log.txt

 

:COMPLETE

rem 下面一行用于拷贝备份文件到映射的驱动器上

rem copy %PROJECT%.rar %RAR_STORE%\%PROJECT%\

move %FILENAME%.dmp %RAR_STORE%\%PROJECT%\

del %Log_PATH%\A.TMP

@echo %UPPER% > %Log_PATH%\%PROJECT%_last_revision.txt

 

:N_EXIT

@echo 项目库%PROJECT%处理结束...>> %Log_PATH%\%PROJECT%_log.txt

@CD..

@exit /B

:no_args

@ECHO ON

@echo "正确调用方法: dump 项目库名"

------------------------------------------------------------------------------------------------------------------------

2)        svndump.bat 

echo off

remSubversion的安装目录及执行文件

setSVN_HOME="D:\Program Files (x86)\VisualSVN Server"

setSVN_ADMIN=%SVN_HOME%\bin\svnadmin.exe

setSVN_LOOK=%SVN_HOME%\bin\svnlook.exe

rem 配置库仓库根目录

setSVN_REPOROOT=G:\Repositories

rem 压缩命令

setRAR_CMD="D:\Program Files\WinRAR\WinRAR.exe"

rem 增量备份文件存放路径

setRAR_STORE="G:\svnincrementW"

rem 日志及最后一次备份修订号存放文件目录,以下是跟增量备份脚本目录同一目录

setLog_PATH=G:\svnaddback

 

@echo 项目库%PROJECT%处理1...>>%Log_PATH%\%PROJECT%_log.txt

rem 读取项目库列表文件,并忽略其中;开头的行

FOR /f "eol=;" %%C IN (projectlist.conf) DO callG:\svnaddscript\dump.bat %%C

3)        projectlist.conf

 

;**************************************************

;01. project1开发库

; 更新频率: 高

;**************************************************

project

;**************************************************

;02. 此处可写注释信息

;**************************************************

test

;**************************************************

;02. 此处可写注释信息

;**************************************************

Yiliaogm

 

四、     定时备份

Windows 20003 server版:

在【控制面板】中选择【任务计划】,按照步骤一步步进行,建立一个定时任务计划。

 

 

五、     备份恢复检查

(1)      全量备份还原

 

直接把“D:\13svnserver_all_backup\2014-08-14 \XX项目资料库” 复制到“F:\ Repositories\XX项目资料库”;

 

(2) svnadmin load 要恢复的版本库路径及名称 < 导出的命名 

示例:svnadmin load D:\svn\fxq_fxcjg < F:\svnbackup\delta\fxq_fxcjg.dump 

 

svnadmin hotcopy e:\svn\repository e:\svnbackup 


 

以上的操作已经OK了,现在需要做的是将完全备份和增量备份结合起来,也就是在完全备份后清理增量备份的结果,使之只保存完全备份后的结果。

当果真出现版本库的故障,就要求我们实现版本库的恢复操作了,这是用要使用svnadmin load命令,同时也需要上次的完全备份例如要把上次完全备份backuprepo,和之后的增量备份dumpfile:

这篇关于SVN服务器异地备份及恢复(Windows)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1037542

相关文章

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

MySQL MCP 服务器安装配置最佳实践

《MySQLMCP服务器安装配置最佳实践》本文介绍MySQLMCP服务器的安装配置方法,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下... 目录mysql MCP 服务器安装配置指南简介功能特点安装方法数据库配置使用MCP Inspector进行调试开发指

在Windows上使用qemu安装ubuntu24.04服务器的详细指南

《在Windows上使用qemu安装ubuntu24.04服务器的详细指南》本文介绍了在Windows上使用QEMU安装Ubuntu24.04的全流程:安装QEMU、准备ISO镜像、创建虚拟磁盘、配置... 目录1. 安装QEMU环境2. 准备Ubuntu 24.04镜像3. 启动QEMU安装Ubuntu4

Windows下C++使用SQLitede的操作过程

《Windows下C++使用SQLitede的操作过程》本文介绍了Windows下C++使用SQLite的安装配置、CppSQLite库封装优势、核心功能(如数据库连接、事务管理)、跨平台支持及性能优... 目录Windows下C++使用SQLite1、安装2、代码示例CppSQLite:C++轻松操作SQ

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2

基于Python实现一个Windows Tree命令工具

《基于Python实现一个WindowsTree命令工具》今天想要在Windows平台的CMD命令终端窗口中使用像Linux下的tree命令,打印一下目录结构层级树,然而还真有tree命令,但是发现... 目录引言实现代码使用说明可用选项示例用法功能特点添加到环境变量方法一:创建批处理文件并添加到PATH1

Windows的CMD窗口如何查看并杀死nginx进程

《Windows的CMD窗口如何查看并杀死nginx进程》:本文主要介绍Windows的CMD窗口如何查看并杀死nginx进程问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows的CMD窗口查看并杀死nginx进程开启nginx查看nginx进程停止nginx服务

Windows 系统下 Nginx 的配置步骤详解

《Windows系统下Nginx的配置步骤详解》Nginx是一款功能强大的软件,在互联网领域有广泛应用,简单来说,它就像一个聪明的交通指挥员,能让网站运行得更高效、更稳定,:本文主要介绍W... 目录一、为什么要用 Nginx二、Windows 系统下 Nginx 的配置步骤1. 下载 Nginx2. 解压

windows系统上如何进行maven安装和配置方式

《windows系统上如何进行maven安装和配置方式》:本文主要介绍windows系统上如何进行maven安装和配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录1. Maven 简介2. maven的下载与安装2.1 下载 Maven2.2 Maven安装2.

使用Python实现Windows系统垃圾清理

《使用Python实现Windows系统垃圾清理》Windows自带的磁盘清理工具功能有限,无法深度清理各类垃圾文件,所以本文为大家介绍了如何使用Python+PyQt5开发一个Windows系统垃圾... 目录一、开发背景与工具概述1.1 为什么需要专业清理工具1.2 工具设计理念二、工具核心功能解析2.