Linux下SVN全量与增量备份shell脚本
SVN备份说明
团队里有一台SVN服务器,空间达到了几十个G,之前一直是隔段时间全盘拷贝备份,但是感觉太烦锁了,前段时间做了将这台服务器SVN的内容同步到另一台服务器上,挺好用的,总结一下,过程:操作系统:windows server 2008SVN:VisualSVN Server服务器:A表示原来代码服务器,B表示同步服务器备份服务器安装与A相同的VisualSVN Server版本1.在B上的环境变量(path)添加:C:\Program Files (x86)\VisualSVN Server\bin 添加这一步主要是为了下面用到SVN的命令不用输路径2.创建库,由于A服务器已有了很多库,所以做成了批处理文件的方式,文件内容如下:svnadmin create 盘符:/Repositories/项目库1svnadmin create 盘符:/Repositories/项目库2……项目库1、2的名称与A里的一样然后执行这个批处理文件,然后Repositories会出现很多库文件夹了……3..创建目标库的hooks文件,文件名为pre-revprop-change.bat,内容为空,先放在..\sysmodel 目录下4.将上步创建的文件拷到每个库文件夹下,跟上步一样,用批处理文件,文件内容:copy /y 本地盘符:\Repositories\sysmodel\pre-revprop-change.bat 盘符:\Repositories\项目库1\hookscopy /y 本地盘符:\Repositories\sysmodel\pre-revprop-change.bat 盘符:\Repositories\项目库2\hooks……然后执行这个批处理文件5.关联A与B里的库(初始化),还是用批处理:svnsync init file:///本地盘符:/Repositories/项目库1 项目库1的SVN路径(在A服务器上的)svnsync init file:///本地盘符:/Repositories/项目库2 项目库2的SVN路径(在A服务器上的)……然后执行这个批处理文件,这一步是将A的内容同步下来了,时间有点久……6.到上一步,B与A的内容一致了,但是如果A上某个库的项目库有更新怎么办呢?这时要用到windows里的任务计划功能了(1)新建同步库.bat的批处理,内容如下:svnsync sync file:///本地盘符:/Repositories/项目库1svnsync sync file:///本地盘符:/Repositories/项目库2……(2)新建任务计划,在计划里调用上一步建立的批处理文件。
svn备份方案
svn备份方案SVN(Subversion)是一种版本控制系统,广泛用于软件开发和团队协作中。
为了保护和恢复代码库,在使用SVN时备份是非常重要的。
本文将介绍一种可行的SVN备份方案,以确保代码的安全性和可靠性。
一、需求分析在制定备份方案之前,我们首先需要了解备份的需求。
根据实际情况,我们需要考虑以下几方面的需求:1. 数据的完整性:备份的数据应与原始数据完全一致,不可出现数据丢失或损坏情况。
2. 备份频率:备份的频率应根据代码更新的频率来确定,以确保备份数据的时效性。
3. 存储空间:备份数据的存储空间应合理控制,避免过多的空间占用。
4. 数据恢复:备份方案应包含数据的快速恢复方式,以便在需要时能够快速恢复代码。
二、备份方案基于以上需求,我们可以采用以下的SVN备份方案:1. 定期备份:根据代码更新的频率,制定定期备份策略,例如每天、每周或每月备份一次。
可以借助计划任务、Cron或其他定时调度工具来实现自动备份。
2. 完全备份:每次备份时,将整个SVN代码库文件夹进行完全备份,确保备份数据的完整性。
3. 增量备份:为了节省存储空间,可以在首次备份后,只备份新增或修改的文件和目录,而不是全量备份整个代码库。
这样可以减少备份数据量,加快备份速度。
4. 备份存储位置:将备份数据存储在不同于原始代码库的位置,以避免单点故障。
可以选择使用本地磁盘、网络共享存储或云存储等方式,确保备份数据的安全性。
5. 数据恢复测试:定期进行数据恢复测试,验证备份数据的可用性和恢复速度。
通过测试,及时修复备份方案中的问题,确保在数据丢失时能够快速恢复。
6. 备份日志记录:对备份过程进行日志记录,包括备份时间、备份内容等信息,以便后期跟踪备份记录和查询备份历史。
三、备份方案实施在实施备份方案时,需要按照以下步骤进行:1. 确定备份方案:根据实际需求,确定合适的备份方案,包括备份频率、备份策略和存储位置等。
2. 配置备份脚本:根据选定的备份方案,编写相应的备份脚本。
SVN备份脚本
备份步骤:1、备份脚本svndump.bat通过读取projectlist.conf(存放要备份的库的名称)的数据来依次对库进行备份(全部或增量)2、库首次备份时使用全部备份,且自动生成备份日志(读取log.conf文件里的说明),记录了已备份的文件名,用于后面还原时依次读取备份文件3、增量备份也会往备份日志中增加记录备注:1、需要把dump.bat,log.conf,projectlist.conf存放在备份文件存放的目录(如本例的:z:\\SVN_backup_AF.12.03)================================================================================================ projectlist.conf================================================================================================ ;**************************************************;1. test_10439; 更新频率:;**************************************************test_10439;**************************************************;2. test_back; 更新频率:;**************************************************test_back================================================================================================ log.conf================================================================================================ #QUOTE:#备份日志:#//这是一个日志文件的抬头信息,可以记录一些有意义的信息##这里是我的项目库备份日志实例##QUOTE:#备份日志:================================================================================================ svndump.bat================================================================================================ @echo on@echo ================================================@echo 说明:启动备份时,需要配置两个环境变量@echo 1、SVN_HOME 指定svn的安装目录@echo 2、RAR_CMD 指定RAR命令行压缩工具所在目录@echo 3、SVN_REPOROOT 指定项目库的根目录(多库模式)@echo 另外,如果需要异地备份,可以指定为网络映射Z盘@echo ================================================rem set logfile=svndump.logset SVN_HOME=E:\freescm\freescm\SVN\binset SVN_ADMIN=%SVN_HOME%\svnadmin.exeset SVN_LOOK=%SVN_HOME%\svnlook.exeset SVN_REPOROOT=E:\freescm\freescm\SVN\REPOset RAR_CMD="C:\Progra~1\WinRAR\WinRAR.exe"rem if not exist z:\nul net use z: \\SVN_backup_AF.12.03z:cd Z:\SVN_backup_AF.12.03rem 读取项目库列表文件,并忽略其中;开头的行FOR /f "eol=;" %%C IN (projectlist.conf) DO @call dump.bat %%C@pause========================================================================================== dump.bat==========================================================================================@ECHO onrem 调用格式:dump 项目库名if "%1"=="" goto no_argsset PROJECT=%1if not exist %PROJECT% mkdir %PROJECT%cd %PROJECT%SET LOWER=0SET UPPER=0@FOR /f %%D IN ('%SVN_LOOK% youngest %SVN_REPOROOT%\%PROJECT%') DO set UPPER=%%Dif %UPPER%==0 GOTO :N_EXITif not exist %PROJECT%_last_revision.txt GOTO :BAKUPrem 取出上次备份后的版本号,并做+1处理(注意此算法未在98系统验证)@FOR /f %%C IN (%PROJECT%_last_revision.txt) DO @set LOWER=%%C@set /a LOWER=%LOWER%+1rem 不需要备份,则跳转结束IF %LOWER% gtr %UPPER% GOTO :N_EXIT:BAKUPSET FILENAME=%PROJECT%_%LOWER%_%UPPER%@ECHO 开始备份项目库:%PROJECT%,生成文件=%FILENAME%%SVN_ADMIN% dump %SVN_REPOROOT%\%PROJECT% -r %LOWER%:head --incremental >%FILENAME%.dmp%RAR_CMD% a -df %PROJECT%_%LOWER%_%UPPER%.rar %FILENAME%.dmprem 准备写备份日志信息IF %LOWER% gtr 0 GOTO :WRITENOTEif not exist %PROJECT%_log.txt @copy ..\log.conf %PROJECT%_log.txt@ECHO #%date% >> %PROJECT%_log.txt@echo #-- 添加备份文件 >> %PROJECT%_log.txt@echo %PROJECT%_%LOWER%_%UPPER% >> %PROJECT%_log.txt@echo #从[%LOWER%]到[%UPPER%] >> %PROJECT%_log.txtGOTO :COMPLETE:WRITENOTE@ECHO #%date% >> %PROJECT%_log.txt@echo #-- 添加增量备份文件 >> %PROJECT%_log.txt@echo %PROJECT%_%LOWER%_%UPPER% >> %PROJECT%_log.txt@echo #从[%LOWER%]到[%UPPER%] >> %PROJECT%_log.txt:COMPLETErem 下面一行用于拷贝备份文件到映射的驱动器上rem copy %PROJECT%.rar z:\%PROJECT%\@echo %UPPER% > %PROJECT%_last_revision.txt :N_EXIT@echo 项目库%PROJECT%处理结束...@CD..@exit /B:no_args@ECHO ON@echo "正确调用方法: dump 项目库名"。
Svn在Windows下实现自动全量增量备份和异地备份汇总
SVN在Windows下实现自动全量增量备份和异地备份1SVN备份介绍1.1SVN备份内容SVN在Windows下的自动备份实现,包括:1)SVN目录的全备份(1周或1个月备份1次,由windows计划来调度执行);2)SVN增量备份(每日备份1次,由windows计划来调度执行);1.2SVN备份流程上述2类备份分别进行的流程如下:1)通过windows定时任务功能,调度进行备份、压缩、FTP上传功能的bat文件;2)将自动备份成按每日日期.dmp备份到SVN本机的其他磁盘空间中,分全备份和增量备份;3)启动ftp上传命令,将备份的rar包立即上传在异地服务器上。
异地服务器需提前架好ftp服务器并建立好相关上传目录,建议使用用FileZilla_Server、serverU或者简单ftp软件进行搭建。
4)整个上传过程,详细记录备份、压缩、FTP上传各步骤详细日志,随时可以查阅每次备份记录的详细情况。
1.3SVN还原功能可以进行还原所有版本库2SVN备份BAT设计1.1全备份BAT1)SVN的全备份,AllBackUp.bat:Begin@echo offsetlocal enabledelayedexpansionecho 正在准备备份所有版本库……echo.::设置SVN命令目录set SVN_CMD="E:\VisualSVN Server\bin"::设置所有版本库根目录set REPOS_ROOT=D:\Repositories::设置所有版本库备份根目录set REPOS_BACKUP_ROOT=F:\[SvnBackup]\全备份if not exist %REPOS_BACKUP_ROOT% mkdir %REPOS_BACKUP_ROOT%::设置所有版本库备份目录set BACKUP_DIRECTORY=%REPOS_BACKUP_ROOT%\%date:~0,10%.dmpset BACKUP_DIRECTORY=%BACKUP_DIRECTORY:/=-%rem if exist %BACKUP_DIRECTORY% goto Error2rem mkdir %BACKUP_DIRECTORY%if not exist %BACKUP_DIRECTORY% mkdir %BACKUP_DIRECTORY%::设置用户权限信息备份目录set REPOS_USER_INFO_DIRECTORY=%BACKUP_DIRECTORY%\UserInfoif not exist %REPOS_USER_INFO_DIRECTORY% mkdir %REPOS_USER_INFO_DIRECTORY%::备份所有版本库::i->版本库、j->版本库最新版本号、k->上次完全备份时版本库的版本号echo ===================%date% %time:~0,8%:执行全部全量备份版本库.=================== >> %REPOS_BACKUP_ROOT%\BackUp.logecho 备份的版本库版本信息如下: >> %REPOS_BACKUP_ROOT%\BackUp.log::读取版本库根目录下每个文件夹,并判断其是否是一个版本库for /r %REPOS_ROOT% %%i in (.) do if exist %%i\conf\svnserve.conf ( ::将当前版本库的最新版本信息写入tmp文件%SVN_CMD%\svnlook youngest %%~fi > %%~ni_last_revision.tmp::取出当前版本库的最新版本信息,判断其是否大于0,是则进行处理for /f %%j in (%%~ni_last_revision.tmp) do if %%j gtr 0 (echo.echo 开始备份版本库%%~ni……::全量备份版本库%SVN_CMD%\svnadmin dump --deltas %%~fi > %BACKUP_DIRECTORY%\%%~ni-0-%%j.dmpecho %time:~0,8% %%~ni: 0-%%j >> %REPOS_BACKUP_ROOT%\BackUp.logecho 版本库%%~ni已经成功备份到%BACKUP_DIRECTORY%\%%~ni-0-%%j.dmp!)::删除临时文件del %%~ni_last_revision.tmp)echo.echo 开始备份用户权限信息……xcopy /y %REPOS_ROOT%\authz %REPOS_USER_INFO_DIRECTORY%xcopy /y %REPOS_ROOT%\authz-windows %REPOS_USER_INFO_DIRECTORY%xcopy /y %REPOS_ROOT%\htpasswd %REPOS_USER_INFO_DIRECTORY%echo ---------------------------------->> %REPOS_BACKUP_ROOT%\BackUp.log echo.echo 用户权限信息备份成功!echo %time:~0,8% 用户权限信息备份成功! >> %REPOS_BACKUP_ROOT%\BackUp.log echo.echo 全部版本库备份成功!echo %time:~0,8% 全部版本库备份成功! >> %REPOS_BACKUP_ROOT%\BackUp.logAllBackupByFtpgoto end:Error2echo.echo 备份目录已经存在,请确认后删除该目录,重新运行程序!goto End:Endecho.echo 程序执行结束!2)SVN的全备份进行FTP上传,AllBackupByFtp.bat@echo offREM ======设置区Start================================set ftpUser=svnset ftpPass=svnbackupset ftpIP=192.168.1.22set ftpPort=2016REM 指定从FTP下载下来的文件存放到本机哪个目录set ftpFolder=/全备份REM 本地需要备份的根目录set SvnBackupRoot=F:\[SvnBackup]\全备份REM 本地需要打压缩包的备份目录(今天备份文件夹2016-01-01.dmp)set SvnBackupFolder=%SvnBackupRoot%\%date:~0,10%.dmpREM 需要压缩成的文件路径及文件名(今天备份上传文件2016-01-01.dmp.rar)set rarToFilePath=%SvnBackupFolder%.rarREM RAR执行文件的路径set rarExePath="C:\Program Files\WinRAR\"REM RAR执行文件的路径set bakupLogFilePath=%SvnBackupRoot%\BackUp.logREM FTP命令执行文件缓存set ftpFile=%cd%\TempFTP.txt>"%ftpFile%" (echo,open %ftpIP% %ftpPort%echo,%ftpUser%echo,%ftpPass%echo cd "%ftpFolder%"echo prompt offecho binecho put %rarToFilePath%echo put %bakupLogFilePath%echo bye)set Path=%Path%;%rarExePath%set logFilePath=%SvnBackupRoot%\ftpUp.logREM ======设置区End ================================echo ===================%date% 执行异地版本库全量备份开始================= >> %logFilePath%if not exist %SvnBackupFolder% goto Error1echo %time:~0,8% 备份压缩开始... >> %logFilePath%WinRAR.exe a -ep1 -k -r -s -ibck %rarToFilePath% %SvnBackupFolder%echo %time:~0,8% 备份压缩成功,压缩的文件路径为:%rarToFilePath% >> %logFilePath%echo %time:~0,8% 备份压缩继续上传FTP开始... >> %logFilePath%ftp -v -i -s:"%ftpFile%"echo %time:~0,8% 上传FTP成功,上传FTP目录为:%ftpFolder% >> %logFilePath%del /q /s /f %rarToFilePath%echo. >> %logFilePath%goto end:Error1echo.echo %time:~0,8% 提示: 需要进行压缩打包的备份文件夹%SvnBackupFolder%不存在,请确认SVN是否本地备份完成! >> %logFilePath%echo %time:~0,8% 备份失败! >> %logFilePath%echo. >> %logFilePath%echo 提示:echo 需要进行压缩打包的备份文件夹%SvnBackupFolder%不存在,请确认SVN是否本地备份完成!:Endecho.echo 程序执行结束!1.2增量备份BAT1)SVN数据库的增量备份,IncreBackUp.bat::设置所有版本库备份根目录set REPOS_BACKUP_ROOT=F:\[SvnBackup]\增量备份if not exist %REPOS_BACKUP_ROOT% mkdir %REPOS_BACKUP_ROOT%::获取LastRevisions目录set REPOS_LAST_REVERSION_DIRECTORY=%REPOS_BACKUP_ROOT%\LastRevisionsrem if not exist %REPOS_LAST_REVERSION_DIRECTORY% goto Error1if not exist %REPOS_LAST_REVERSION_DIRECTORY%mkdir %REPOS_LAST_REVERSION_DIRECTORY%::设置所有版本库备份目录set BACKUP_DIRECTORY=%REPOS_BACKUP_ROOT%\%date:~0,10%.dmpset BACKUP_DIRECTORY=%BACKUP_DIRECTORY:/=-%rem if exist %BACKUP_DIRECTORY% goto Error2rem mkdir %BACKUP_DIRECTORY%if not exist %BACKUP_DIRECTORY% mkdir %BACKUP_DIRECTORY%::设置用户权限信息备份目录set REPOS_USER_INFO_DIRECTORY=%BACKUP_DIRECTORY%\UserInfoif not exist %REPOS_USER_INFO_DIRECTORY% mkdir %REPOS_USER_INFO_DIRECTORY%::设置LastRevisions备份目录set REPOS_LAST_REVERSION_BACKUP_DIRECTORY=%BACKUP_DIRECTORY%\LastRevisions if not exist %REPOS_LAST_REVERSION_BACKUP_DIRECTORY%mkdir %REPOS_LAST_REVERSION_BACKUP_DIRECTORY%::备份所有版本库::i->版本库、j->版本库最新版本号、k->上次完全备份时版本库的版本号echo ===================%date% %time:~0,8%:执行全部版本库备份.=================== >> %REPOS_BACKUP_ROOT%\BackUp.logecho 备份的版本库版本信息如下: >> %REPOS_BACKUP_ROOT%\BackUp.log::读取版本库根目录下每个文件夹,并判断其是否是一个版本库for /r %REPOS_ROOT% %%i in (.) do if exist %%i\conf\svnserve.conf (::将当前版本库的最新版本信息写入tmp文件%SVN_CMD%\svnlook youngest %%~fi > %%~ni_last_revision.tmp::取出当前版本库的最新版本信息,判断其是否大于0,是则进行处理for /f %%j in (%%~ni_last_revision.tmp) do if %%j gtr 0 (::判断以前是否存在该版本库的版本信息,存在说明以前备份过,需要基于其进行备份;否则对该版本库进行全新备份if exist %REPOS_LAST_REVERSION_DIRECTORY%\%%~ni_last_revision.txt (::读取该版本库上次备份时保存的版本信息,如果小于当前版本信息则进行处理for /f %%k in (%REPOS_LAST_REVERSION_DIRECTORY%\%%~ni_last_revision.txt) do if %%k lss %%j (echo.echo 开始备份版本库%%~ni……::取得该版本库本次备份的起始版本号set version=%%kset /a version=!version!+1::增量备份版本库%SVN_CMD%\svnadmin dump --deltas %%~fi --revision !version!:head --incremental > %BACKUP_DIRECTORY%\%%~ni-!version!-%%j.dmpecho %%~ni: !version!-%%j >> %REPOS_BACKUP_ROOT%\BackUp.logecho 版本库%%~ni已经成功备份到%BACKUP_DIRECTORY%\%%~ni-!version!-%%j.dmp! )) else (echo.echo 开始备份版本库%%~ni……::全量备份版本库%SVN_CMD%\svnadmin dump --deltas %%~fi > %BACKUP_DIRECTORY%\%%~ni-0-%%j.dmp echo %%~ni: 0-%%j >> %REPOS_BACKUP_ROOT%\BackUp.logecho 版本库%%~ni已经成功备份到%BACKUP_DIRECTORY%\%%~ni-0-%%j.dmp!)::将本次版本库备份时的最新版本信息写入文件保存echo %%j> %REPOS_LAST_REVERSION_DIRECTORY%\%%~ni_last_revision.txtecho %%j> %REPOS_LAST_REVERSION_BACKUP_DIRECTORY%\%%~ni_last_revision.txt )::删除临时文件del %%~ni_last_revision.tmp)echo.echo 开始备份用户权限信息……xcopy /y %REPOS_ROOT%\authz %REPOS_USER_INFO_DIRECTORY%xcopy /y %REPOS_ROOT%\authz-windows %REPOS_USER_INFO_DIRECTORY%xcopy /y %REPOS_ROOT%\htpasswd %REPOS_USER_INFO_DIRECTORY%echo.echo 用户权限信息备份成功!echo.echo 全部版本库备份成功!IncreBackupByFtpgoto end:Error1echo.echo 提示:echo 上次备份保存的%REPOS_LAST_REVERSION_DIRECTORY%文件夹不存在,请确认后从上次备份中拷贝LastReversions到%REPOS_BACKUP_ROOT%目录,重新运行程序; echo 或者,不基于上次备份重新执行备份!echo 重新备份?(Y/N)set /p input=if %input%==Y (mkdir %REPOS_LAST_REVERSION_DIRECTORY%goto Begin) else (goto End):Error2echo.echo 备份目录已经存在,请确认后删除该目录,重新运行程序!goto End:Endecho.echo 程序执行结束!2)SVN数据的增量备份的FTP上传,IncreBackupByFtp.bat@echo offREM ======设置区Start================================set ftpUser=svnset ftpPass=svnbackupset ftpIP=192.168.1.22set ftpPort=2016REM 指定从FTP下载下来的文件存放到本机哪个目录set ftpFolder=/增量备份REM 本地需要备份的根目录set SvnBackupRoot=F:\[SvnBackup]\增量备份REM 本地需要打压缩包的备份目录(今天备份文件夹2016-01-01.dmp)set SvnBackupFolder=%SvnBackupRoot%\%date:~0,10%.dmpREM 需要压缩成的文件路径及文件名(今天备份上传文件2016-01-01.dmp.rar)set rarToFilePath=%SvnBackupFolder%.rarREM RAR执行文件的路径set rarExePath="C:\Program Files\WinRAR\"REM RAR执行文件的路径set bakupLogFilePath=%SvnBackupRoot%\BackUp.logREM FTP命令执行文件缓存set ftpFile=%cd%\TempFTP.txt>"%ftpFile%" (echo,open %ftpIP% %ftpPort%echo,%ftpUser%echo,%ftpPass%echo cd "%ftpFolder%"echo prompt offecho binecho put %rarToFilePath%echo put %bakupLogFilePath%echo bye)set Path=%Path%;%rarExePath%set logFilePath=%SvnBackupRoot%\ftpUp.logREM ======设置区End ================================echo ===================%date% 执行异地版本库增量备份开始.=================== >> %logFilePath%if not exist %SvnBackupFolder% goto Error1echo %time:~0,8% 备份压缩开始... >> %logFilePath%WinRAR.exe a -ep1 -k -r -s -ibck %rarToFilePath% %SvnBackupFolder%echo %time:~0,8% 备份压缩成功,压缩的文件路径为:%rarToFilePath% >> %logFilePath%echo %time:~0,8% 备份压缩继续上传FTP开始... >> %logFilePath%ftp -v -i -s:"%ftpFile%"echo %time:~0,8% 上传FTP成功,上传FTP目录为:%ftpFolder% >> %logFilePath%del /q /s /f %rarToFilePath%echo. >> %logFilePath%goto end:Error1echo.echo %time:~0,8% 提示: 需要进行压缩打包的备份文件夹%SvnBackupFolder%不存在,请确认SVN是否本地备份完成! >> %logFilePath%echo %time:~0,8% 备份失败! >> %logFilePath%echo. >> %logFilePath%echo 提示:3SVN还原BAT设计SVN的还原LoadBackUp.bat@echo offecho 正在准备还原所有版本库……echo.::设置SVN命令目录set SVN_CMD="E:\VisualSVN Server\bin"::设置所有版本库根目录set REPOS_ROOT=D:\Repositories::设置所有版本库备份根目录set REPOS_BACKUP_ROOT=F:\[SvnBackup]\增量备份if not exist %REPOS_BACKUP_ROOT% goto Error::还原所有版本库echo ===================%date% %time:~0,8%:执行版本库执行还原操作=================== >> %REPOS_BACKUP_ROOT%\SvnLoad.logecho 还原的版本库版本信息如下: >> %REPOS_BACKUP_ROOT%\SvnLoad.log::将所有保存版本库备份的文件夹名写入tmpdir /b %REPOS_BACKUP_ROOT%\*.dmp > folderName.tmp::依次操作tmp文件中包含的文件夹for /f %%h in (folderName.tmp) do (::将所有版本库文件名写入tmpdir /b /a-d %REPOS_BACKUP_ROOT%\%%h\*.dmp > fileName.tmp::依次操作tmp文件中包含的备份文件for /f %%i in (fileName.tmp) do (::处理备份文件名,以取得版本库名和相应的版本号for /f "tokens=1,2* delims=-" %%j in ("%%~ni") do (echo.echo 开始还原版本库%REPOS_BACKUP_ROOT%\%%h\%%j-%%k-%%l……::版本库根目录不存在和版本库名相同名字的文件夹则创建一个if not exist %REPOS_ROOT%\%%j (mkdir %REPOS_ROOT%\%%j)::版本库根目录中该文件夹不是版本库,则创建一个if not exist %REPOS_ROOT%\%%j\conf\svnserve.conf (%SVN_CMD%\svnadmin create %REPOS_ROOT%\%%j)::还原备份%SVN_CMD%\svnadmin load %REPOS_ROOT%\%%j < %REPOS_BACKUP_ROOT%\%%h\%%i echo %%j: %%k-%%l >> %REPOS_BACKUP_ROOT%\SvnLoad.logecho 版本库%REPOS_BACKUP_ROOT%\%%h\%%j-%%k-%%l还原成功!)))::删除临时文件del fileName.tmpdel folderName.tmpecho.echo 全部版本库还原成功!goto end:Errorecho.echo 版本库备份目录%REPOS_BACKUP_ROOT%不存在,请确认后重新运行程序! goto End:End。
Shell脚本编写的高级技巧如何进行数据备份和恢复
Shell脚本编写的高级技巧如何进行数据备份和恢复数据备份和恢复是现代计算机系统中非常重要的任务,它们能够确保数据的安全性和可靠性。
在Shell脚本编写的高级技巧中,我们可以利用一些工具和技术实现数据备份和恢复的自动化操作。
本文将介绍如何使用Shell脚本编写高级技巧来进行数据备份和恢复。
一、数据备份使用Shell脚本进行数据备份可以简化操作并提高效率。
以下是几种常见的数据备份方法和技巧:1. 增量备份增量备份是根据某个时间点的完整备份,只备份从该时间点之后修改的文件或目录。
这种备份方法可以节省存储空间并加快备份速度。
使用Shell脚本可以编写增量备份的命令,例如使用rsync命令来实现增量备份。
2. 定时备份定时备份是指按照预定的时间间隔自动进行备份操作。
可以使用Shell脚本编写一个定时任务,利用cron或者其他调度工具来定时执行备份脚本。
在Shell脚本中可以使用tar或者cp等命令进行数据备份。
3. 数据同步备份数据同步备份是指将源目录中的数据同步到目标目录进行备份。
可以使用Shell脚本编写一个同步脚本,使用rsync或者其他工具来实现数据的同步备份。
通过增量同步的方式可以减少数据的传输量和备份时间。
4. 压缩备份为了节省存储空间,可以使用压缩算法对备份数据进行压缩。
在Shell脚本中可以使用gzip或者其他压缩工具对备份数据进行压缩。
在进行数据恢复时,需要解压缩文件并恢复数据。
二、数据恢复数据恢复是在数据丢失或者数据损坏时将备份数据还原到原始状态的过程。
以下是几种常见的数据恢复方法和技巧:1. 恢复完整备份如果只需要恢复最近一次完整备份的数据,可以直接使用cp或者tar等命令将备份数据复制到目标目录。
2. 恢复增量备份如果需要恢复增量备份的数据,可以先找到最近的完整备份文件,然后使用rsync命令或者其他差异工具恢复增量备份的数据。
3. 恢复压缩备份如果备份数据进行了压缩,需要先使用相应的解压缩工具对备份文件进行解压,然后再进行数据恢复操作。
Linux系统备份还原脚本使用Shell脚本实现对Linux系统的完整备份和还原
Linux系统备份还原脚本使用Shell脚本实现对Linux系统的完整备份和还原在日常的工作和生活中,我们经常需要对Linux系统进行备份和还原操作,以防止数据丢失和系统崩溃。
而使用Shell脚本来实现Linux系统的备份和还原是一种简便高效的方法。
本文将介绍如何使用Shell脚本来实现Linux系统的完整备份和还原操作。
一、备份脚本的编写在编写备份脚本之前,我们需要确定备份的目标和方式。
一般而言,我们可以选择将整个系统备份到一个镜像文件中,也可以选择仅备份特定的目录和文件。
这里我们以备份整个系统为例进行说明。
1. 创建备份脚本首先,在Linux系统上创建一个后缀为.sh的文件,命名为backup.sh,作为我们的备份脚本。
使用文本编辑器打开该文件。
2. 设置备份目录在脚本的开头,我们需要设置备份目录的路径。
可以选择将备份文件存储在本地的硬盘中,也可以选择将备份文件上传至网络存储设备或云存储平台。
在这里,我们将备份文件存储在本地的硬盘中,并将备份目录设置为“/backup”。
```shell#!/bin/bashbackup_dir="/backup"```3. 创建备份文件接下来,我们需要创建一个以当前日期和时间命名的备份文件,这样可以确保每次备份的文件都是唯一的。
```shellbackup_file="${backup_dir}/backup-$(date +%Y%m%d-%H%M%S).tar.gz"```4. 执行备份操作使用tar命令将整个系统备份到指定的文件中,并显示备份过程的进度信息。
```shelltar -czf "${backup_file}" --exclude={"/proc","/sys","/mnt","/lost+found","/backup","/dev"} / ```二、还原脚本的编写当系统遇到问题或需要还原到之前的某个状态时,我们可以使用还原脚本来还原备份的系统。
linux实现对上传文件的定时备份、增量备份的方法
linux实现对上传⽂件的定时备份、增量备份的⽅法介绍如果你们使⽤的是类似阿⾥云的OSS存储服务,那么可以使⽤服务提供的定时备份,这样可以不⽤考虑在服务器上做⽂件备份。
实际上想实现基础的备份还是⾮常简单的,我们平常使⽤tar、unzip等命令打包⽂件,在这个基础上编写⼀个shell脚本,利⽤linux的crontab功能添加⼀个定时执⾏程序,这样就可以简单实现⽂件备份。
但是这种⽅式在⽂件量不断增⼤后还⾏吗?答案肯定是不⾏,当⽂件量不断增加,所占存储空间增⼤。
这种简单的备份⽅式会让压缩时间过长,占⽤过多的存储空间。
那么怎么解决这⼀问题呢?我们可以使⽤增量备份来避免每⼀次都对所有⽂件进⾏备份压缩⽽带来的时间和空间的问题。
下⾯介绍⼀下实现⽅式(linux系统环境)在编写脚本之前需要先查看⼀下服务器上是否有crontab功能注:在这⾥要赞⼀下这个crontab功能,确实⼗分实⽤使⽤ rpm -qa|grep crontab命令查看是否已安装crontab上图所⽰,表明已安装。
如果未安装,则使⽤yum命令进⾏安装yum -y install vixie-cronyum -y install crontabsvixie-cron 是 cron 的主程序;crontabs 是⽤来安装、卸装、或列举⽤来驱动 cron 守护进程的表格的程序。
如果是内⽹环境,需要离线安装的可找要离线安装包1.启动:systemctl start crond.service2.查看状态:systemctl status crond.service上图所⽰,表明crontab已经在运⾏下⾯贴上常⽤命令systemctl start crond.service //启动命令systemctl status crond.service //查看状态systemctl stop crond.service //关闭命令systemctl restart crond.service //重启systemctl enable crond.service //开机运⾏有⼈⽤的不是systemctl命令,特此贴出service常⽤命令service crond start //启动服务service crond stop //关闭服务service crond restart //重启服务service crond reload //重新载⼊配置service crond status //查看crontab服务状态创建脚本⽂件vim backup.sh写⼊脚本命令(注:这个脚本是从⽹上找的,未找到原出处)#!/bin/bash#好的做法#根据项⽬不同来重命名该脚本#例如 amountebak.sh or pandawillsbak.sh#该脚本最好放在 $bakpp定义的绝对路径部分#你可以在$bakpp下找到相应的备份⽂件#例如 /usr/backup/amountebak.sh or /usr/backup/pandawillsbak.sh########## Init Path ######### 在下⾯的参数中必须定义的参数有 $bakpp、$project、$projectppTAR=/bin/tar# 存放备份⽂件的地⽅,以项⽬名称区分bakpp=/data/file_backup/"$project"# 需要备份的⽂件夹,⽂件夹的路径project=fileprojectpp=/data/# parament for varibleym=`date +%Y%m`ymd=`date +%Y%m%d`# 存储备份⽂件的⼦⽬录,以⽉份区分,他的上级⽬录是$bakpp定义的monthbakpp=$bakpp/$ymgidpp=$monthbakppgidshot=gid$project$ym# 完全备份的⽂件名fullname=$ym# 增量备份的⽂件名incrementalname=$ymd# Record the location of the loglog=$bakpp/$project.log############ chk_full ######################## 检查完全备份是否存在,如果不存在就创建它#this function check fullbackup file exist or not , if not then create fullbackup nowchk_full(){if [ -e "$monthbakpp"/"$project"_"$ym"_full.tar.gz ];thenecho ""$project"_"$ym"_full.tar.gz file exist!! ====`date +%Y-%m-%d-%T` " >>$logelsetar_fullfi}######### chk_incremental ######### 检查增量备份是否存在chk_incremental(){while [ -e "$monthbakpp"/"$project"_"$incrementalname"_incremental.tar.gz ]doincrementalname=`echo "$incrementalname + 0.1" | bc `done}######## tar_incremental ######## 执⾏增量备份tar_incremental(){cd $projectppecho "BEIGIN_TIME=====`date +%Y-%m-%d-%T` ==== CREATE "$project"_"$incrementalname"_incremental.tar.gz" >> $log sleep 3$TAR -g $gidpp/$gidshot -zcf $monthbakpp/"$project"_"$incrementalname"_incremental.tar.gz $projectecho "END_TIME========`date +%Y-%m-%d-%T` ==== CREATE "$project"_"$incrementalname"_incremental.tar.gz" >> $log }######## tar_full ###########tar_full(){touch $gidpp/$gidshotcd $projectppecho "BEIGIN_TIME=====`date +%Y-%m-%d-%T` ==== CREATE "$project"_"$fullname"_full.tar.gz" >> $log$TAR -g $gidpp/$gidshot -zcf $monthbakpp/"$project"_"$fullname"_full.tar.gz $projectecho "END_TIME========`date +%Y-%m-%d-%T` ==== CREATE "$project"_"$fullname"_full.tar.gz" >> $log}########### backup ############################### 总体调⽤备份,此时会做相应的检查以确保备份前提准备充分backup(){if [ -d $monthbakpp ]; thenchk_fullchk_incrementaltar_incrementalelsemkdir -p $bakpp/$ymtar_fullfi}########### let's begin ############## 先检查$bakpp是否存在,如果不存在先创建后备份if [ -d $bakpp ];thenbackupelsemkdir -p $bakppbackupfi#advice you can create a file for put backup file, eg /usr/cctcc#crontab#mini hours day month week command# */5 * * * * /home/mmroot/zbb/aaa.sh# 0 1 */1 * * /home/mmroot/zbb/aaa.sh# tar -ztf test.tar.gz 查看备份⽂件⾥⾯的⽂件使⽤wq!命令保存⽂件这个脚本⽂件有三处地⽅需要注意⼀下:#存放备份⽂件的地⽅,以项⽬名称区分bakpp=/data/file_backup/"$project"#需要备份的⽂件夹,⽂件夹的路径project=fileprojectpp=/data/上⾯的三个路径要根据⾃⼰具体情况进⾏更改添加定时任务:输⼊命令crontab -e任务⽰例05 03 * * * cd /data/file_backup/;sh file_backup.sh然后使⽤ crontab -l 查看即可。
Shell脚本中的备份和恢复技巧
Shell脚本中的备份和恢复技巧Shell脚本是一种在Unix和Linux系统中常用的脚本语言,用于自动化执行各种任务。
在日常工作中,我们经常需要对文件和目录进行备份和恢复操作。
本文将介绍使用Shell脚本实现备份和恢复的一些技巧。
一、备份技巧1. 文件备份对单个文件进行备份的方法很简单,只需使用cp命令将文件复制到指定目录即可。
例如,将文件file.txt备份到backup目录下,可以使用以下脚本:```#!/bin/bashcp file.txt backup/```2. 目录备份对整个目录进行备份时,可以使用cp命令结合递归参数-r来实现。
例如,将目录dir备份到backup目录下,可以使用以下脚本:```#!/bin/bashcp -r dir backup/```3. 增量备份为了节省存储空间和备份时间,我们可以使用增量备份的方式。
增量备份只备份与前一次备份后有变动的文件或目录。
下面是一个增量备份的例子:```#!/bin/bashbackup_dir="/path/to/backup"last_backup_dir="/path/to/last_backup"# 比较两次备份,只备份变动的文件或目录rsync -a --delete --link-dest=$last_backup_dir /source_dir/$backup_dir/current# 将当前备份设置为最新备份rm -f $last_backup_dirln -s $backup_dir/current $last_backup_dir```4. 定时备份为了自动定时进行备份,可以使用crontab来实现。
打开终端,输入crontab -e命令,编辑定时任务,并添加备份脚本的调用。
例如,下面的例子是每天凌晨2点执行备份脚本:```0 2 * * * /path/to/backup_script.sh```二、恢复技巧1. 文件恢复对于备份的文件,我们可以使用cp命令将备份文件复制到原始目录中,实现文件的恢复。
linux下面SVN的单库和多库自动备份
Linux下面SVN的自动备份本文档是实现SVN 全库备份,即SVNAdmin hotcopy备份。
以http://192.168.103.198为例.第一步,创建一个存放备份数据的路径,由于全库备份需要的磁盘空间较大,需要找一个空间比较的目录,检查磁盘空间大小命令:#df –h#mkdir /home/public2/backup/#mkdir /home/public2/backup/svn/,保存备份库第二步,采用shell脚本的方式实现自动备份,在~/或者/home目录下创建Shell脚本,指单库备份。
第三步,运行脚本命令,如果该脚本没有执行权限,需要加上执行权限#chmod 777 /home/baksvn_hotcopy.sh#./home/baksvn_hotcopy.sh或者到该目录下运行,运行命令:./baksvn_hotcopy.sh第四步,把这个脚本添加到计划任务中,实现周期性的自动备份,如下内容所示:#vim /etc/crontab,在最后一行添加脚本如下,也可以用crontab –e添加(步骤较复杂):以上实现的是使用hotcopy的方式全量备份SVN单库模式,并且只保留最近3天的备份数据下面介绍多库的全量备份第一步, 创建一个存放备份数据的路径,由于全库备份需要的磁盘空间较大,需要找一个空间比较的目录,并创建日志目录和库文件列表目录。
#mkdir /home/public2/backup/conf#mkdir /home/public2/backup/log#mkdir /home/public2/backup/svn/,保存备份库。
第二步,采用shell脚本的方式实现自动备份,在~/或者/home目录下创建Shell脚本。
# Vim baksvn_hotcopy.sh#第三步,把这个脚本添加到计划任务中,实现周期性的自动备份,如下内容所示:#vim /etc/crontab,在最后一行添加脚本,也可以用crontab –e添加(步骤较复杂)。
SVN增量备份实际方案和脚本
SVN增量备份实际方案和脚本该程序为SVN的增量备份脚本,在实际中使用。
一、整体思路:1、设置系统需要处理的环境变量,如SVN的安装目录、版本库目录、备份的目标目录(BACKUP_SVN_ROOT)等;2、将系统备份初始修订号(每次提交时,系统自己保存的一个序号)储存在文件夹SVN_LOG_BEGIN下(参数可配置)3、将本次备份结束修订号储存在文件夹SVN_LOG_END(参数可配置)4、如果备份目标目录不存在,则创建之;5、如果系统用项目列表备份目录不存在(保存所备份项目名称),为初次运行任务,则创建之;6、如果系统用起始修订号备份目录(保存所有项目各起始修订号)不存在,为初次运行任务,则创建之;7、如果系统用结束修订号备份目录(保存所有项目各结束修订号)不存在,为初次运行任务,则创建之;8、删除原来的项目列表;9、按备份时间的年月日生成备份目标目录的名称;如已经存在该名称的目录(已经备份),则跳转到checkBack,提示清空目录再备份;10、在备份目标文件夹下建立本次备份的目标目录、项目列表保存目录、修订号起/始保存目录,用于将系统的对应目录转移到本此备份目录下,记录此次备份的情况;11、拷贝MD5校验程序到目标盘,以备还原时校验用;-------------开始备份SVN代码库__增量方式------------------12、循环调用'dir /AD /B',判断为文件夹(项目名称),则调用子程序work_dump_incremental.bat 项目名称,以对各个项目逐个增量备份;13、子程序调用结束---各项目备份完毕,则将源项目路径根目录下的所有文件备份---包含认证文件、日志等;14、退出系统。
导出脚本主程序及说明:echo 2011-01-31 copyright V2.0(V1.0为热点拷贝和整项目DUMP方式)rem 本脚本工具为增量备份SVN版本用总脚本,与之配套的脚本为svn_load_in.bat、work_load_in.bat echo offrem Subversion的安装目录set SVN_HOME="C:\Program Files\VisualSVN Server"rem 设置SVN代码库所在的驱动器盘符----------------------------需要修改set SVN_DRV=D:rem 所有版本库的父目录---------------------------------------需要修改set SVN_ROOT=D:\Repositoriesrem 设置SVN代码库所在的目录set SVN_DIR=Repositoriesrem 设置当前已经备份项目列表保存目录set SVN_LOG=svn_logrem 设置当前备份项目的起始修订号保存目录,其下存以对应的项目名称命名的文件,文件中保存起始修订号set SVN_LOG_BEGIN=svn_log_beginrem 设置当前备份项目的结束修订号保存目录,其下存以对应的项目名称命名的文件,文件中保存结束修订号set SVN_LOG_END=svn_log_endrem 备份的盘符-----------------------------------------------需要修改set BACKUP_SVN_DRV=F:rem 备份的目录-----------------------------------------------需要修改set BACKUP_SVN_ROOT=F:\backupsvnset BACKUP_SVN_FOLDER=\backupsvnrem 如果备份目录不存在,则创建之-----数据源部分if not exist %BACKUP_SVN_ROOT% md %BACKUP_SVN_ROOT%rem 如果项目列表备份目录不存在,则创建之if not exist %SVN_DRV%\%SVN_LOG% md %SVN_DRV%\%SVN_LOG%rem 如果修起始订号备份目录不存在,则创建之if not exist %SVN_DRV%\%SVN_LOG_BEGIN% md %SVN_DRV%\%SVN_LOG_BEGIN%rem 如果结束修订号备份目录不存在,则创建之if not exist %SVN_DRV%\%SVN_LOG_END% md %SVN_DRV%\%SVN_LOG_END%rem 删除原来的项目列表del /Q %SVN_DRV%\%SVN_LOG%\*.*set BACKUP_DATE=%date:~0,10%echo %BACKUP_DATE%set BACKUP_PATH=%BACKUP_SVN_FOLDER%\%BACKUP_DATE%_dumpset BACKUP_DIRECTORY=%BACKUP_SVN_ROOT%\%BACKUP_DA TE%_dumpif exist %BACKUP_DIRECTORY% goto checkBackrem 创建-----目标数据部分echo -------------建立备份目录%BACKUP_DIRECTORY%------------------>>%SVN_ROOT%/backup.logmkdir %BACKUP_DIRECTORY%mkdir %BACKUP_DIRECTORY%\%SVN_LOG%mkdir %BACKUP_DIRECTORY%\%SVN_LOG_BEGIN%mkdir %BACKUP_DIRECTORY%\%SVN_LOG_END%copy /Y %SVN_HOME%\bin\md5sum.exe %BACKUP_DIRECTORY%\md5sum.exe%SVN_DRV%cd \cd %SVN_DIR%echo -------------开始备份SVN代码库__增量方式------------------ >>%SVN_ROOT%/backup.logrem 验证目录是否为版本库,如果是则取出名称备份[不用校验,对不设主干、标签、分支的资料性项目也做备份]rem for /r %SVN_ROOT% %%I in (.) do @if exist "%%I\conf\svnserve.conf" %SVN_ROOT%\simpleBackup.bat "%%~fI" %%~nIrem 列举文件夹(项目名),进入备份具体项目子流程for /F %%d in ('dir /AD /B') do call %SVN_ROOT%\work_dump_incremental.bat %%dgoto end:checkBackecho 备份目录%BACKUP_DIRECTORY%已经存在,请清空。
Linux系统文件备份压缩Shell脚本
Linux系统文件备份压缩Shell脚本在Linux系统中,备份和压缩文件是非常常见的任务。
为了提高效率和方便性,我们可以编写一个Shell脚本来实现自动备份和压缩文件的功能。
本文将介绍如何编写一个简单而又强大的Linux系统文件备份压缩Shell脚本。
1. 脚本介绍我们将使用Shell编程语言来编写脚本。
Shell是一种命令行解释器,可以直接在终端中运行。
它具有简单、灵活、易于维护的特点,非常适合用来编写自动化脚本。
2. 脚本编写首先,我们需要创建一个新的Shell脚本文件,我们可以使用任何文本编辑器来完成。
以文件名"backup_compress.sh"为例,我们将在这个文件中编写我们的备份和压缩逻辑。
```shell#!/bin/bash# 配置备份目录和压缩文件名backup_dir="/home/user/backup"compress_filename="backup_$(date +%Y%m%d_%H%M%S).tar.gz"# 备份文件tar -czvf "${backup_dir}/${compress_filename}"/path/to/source_directory# 提示备份完成echo "备份完成!备份文件保存在${backup_dir}/${compress_filename}中。
"```以上是一个简单的备份和压缩脚本示例。
首先,我们使用`#!/bin/bash`指定脚本的解释器为bash。
然后,我们定义了备份目录和压缩文件名的变量。
在脚本中,你可以根据实际需求修改这些变量。
接下来,使用`tar -czvf`命令将需要备份的文件或目录打包成一个tar.gz 格式的压缩文件。
最后,使用`echo`命令提示备份完成,并输出备份文件的保存路径。
3. 脚本运行保存并退出脚本文件后,我们需要给脚本文件添加执行权限。
SVN自动全备份与增量备份
SVN自动全备份与增量备份刚刚上班领导要一个做测试来配置SVN,说实话平时工作只会用,哪会配啊,没办法,谁叫领导安排了呢!SVN装起来简单,可领导发话要自动全备份和增量备份,这哪会啊,可是在网上一搜一大把的,看也看不懂,将就的弄了也是不成功,算了,还是找大牛帮我写个。
这得感谢我们家哥哥!牛掰的人物啊!SVN自动全备份脚本@echo offset ck=Productset yy=%date:~0,4%set mm=%date:~5,2%set dd=%date:~8,2%set hh=%time:~0,2%set mn=%time:~3,2%set ss=%time:~6,2%set filename=%ck%-%yy%%mm%%dd%-%hh%%mn%%ss%svnadmin hotcopy D:\Repositories\Product\%ck% D:\SVN_FULL_BAK\%filename%第一个地址是SVN库的地址,第二个地址是你要备份文件的存放目录,此目录的文件名一定要存在哦!注意:该文件是放在bin目录下的哦!然后在控制面板-》管理工具-》任务计划程序中,将此任务添加进去就ok啦!SVN增量备份脚本echo onset yy=%date:~0,4%set mm=%date:~5,2%set dd=%date:~8,2%set hh=%time:~0,2%set mn=%time:~3,2%set ss=%time:~6,2%set filename=%yy%%mm%%dd%-%hh%%mn%%ss%set svn_repos="D:\Repositories\Product"set backup_dir="E:\SVN_COMMIT_BAK"set backup_file=weekly7_backup_%filename%svnlook youngest %svn_repos%>youngestfor /f "eol= tokens=*" %%i in (youngest) do set "youngest=%%i"::echo last back up revision:%youngest%>>above_back_filepausesvnadmin dump-r %youngest% %svn_repos% >%backup_dir%\%backup_file%-%youngest%--incremental --deltaspause::echo last back up date:%date:~0,10%>>above_back_file2014/6/19第一个地址是需要备份的库的目录,第二个地址是备份到哪个去的目录,该目录一定要存在哦!注意:该文件是放在SVN库的hooks文件夹下。
Linux部署SVN详解(含备份与还原)
Linux部署SVN详解1安装操作系统安装系统采用CentOS-6.2/Database Server2安装配置apache与SVN1)数据包安装顺序:(安装包在CentOS-6.2盘的Packages目录下均可找到)a)apr-1.3.9-3.el6_1.2.i686.rpmb)apr-util-1.3.9-3.el6_0.1.i686.rpmc)httpd-2.2.15-15.el6.centos.i686.rpm依赖文件:httpd-tools-2.2.15-15.el6.centos.i686.rpm与apr-util-ldap-1.3.9-3.el6_0.1.i686.rpmd)sqlite-3.6.20-1.el6.i686.rpme)subversion-1.6.11-2.el6_1.4.i686.rpm依赖文件:neon-0.29.3-1.2.el6.i686.rpmneon依赖文件:pakchois-0.4-3.2.el6.i686.rpm与libproxy-0.3.0-2.el6.i686.rpm安装libproxy命令:三个包同时安装rpm -ivh libproxy-0.3.0-2.el6.i686.rpm libproxy-bin-0.3.0-2.el6.i686.rpm libproxy-python-0.3.0-2.el6.i686.rpmf)mod_dav_svn-1.6.11-2.el6_1.4.i686.rpm安装后将生成文件:/etc/httpd/conf.d/subversion.conf2)修改apache(即httpd)配置文件#vi /etc/httpd/conf/httpd.conf执行上述命令后,对文件进行以下修改:ServerName localhost:80localhost表示自己的IP地址(找到上面一行并做类似修改后保存退出)#service httpd start#chkconfig httpd on文件修改完成后,启动http服务并使用chkconfig命令设置开机自启动。
Linux下SVN全量与增量备份shell脚本
Linux下SVN全量与增量备份shell脚本1.全量#!/bin/sh##subversion的加装目录及继续执行文件svn_home=/usr/local/subversion/binsvn_admin=$svn_home/svnadminsvn_look=$svn_ho me/svnlooksvn_back=/home1/svnbackups/full##配置库根目录svn_reporoot=/home1/svnroot/hxz##增量备份文件存放路径date=$(date'+%y-%m-%d')rar_store=$svn_back/$dateif[!-d\mkdir-p$rar_storefi##加载项目库列表cd$svn_reporootfornamein$(ls)do##开始做全量备份$svn_adminhotcopy$svn_reporoot/$name$rar_store/$namecd$svn_back/$datetarzcvf$name.tar.gz$namerm-rf$rar_store/$namedone##备份打包压缩#packagethebackupfolder#cd$svn_back/$date#tarzcvf$name.tar.gz$name#rm-rf$rar_store/$name2.增量#!/bin/sh#subversion的安装目录及执行文件svn_home=/usr/local/subversion/binsvn_admin=$svn_home/svnadminsvn_look=$svn_ho me/svnlooksvn_back=/home1/svnbackups/increment##配置库根目录svn_reporoot=/home1/svnroot/hxz##增量备份文件存放路径date=$(date'+%y-%m-%d')rar_store=$svn_back/$dateif[!-d\mkdir-p$rar_storefi##日志放置目录log_path=/home1/svnbackups/logif[!-d\mkdir-p$log_pathfi##加载项目库列表cd$svn_reporootfornamein$(ls)doif[!-d\mkdir$rar_store/$nameficd$rar_store/$nameif[!-d\mkdir$log_path/$namefiecho******startingbackupfrom$date******>>$log_path/$name/$name.logecho******svnrepository$namestarttingtobackup******>>$log_path/$name/$name.log $svn_lookyoungest$svn_reporoot/$name>$log_path/a.tmpupper=`head-1$log_path/a.tmp`##抽出上次备份后的版本号,并搞+1处置num_lower=`head-1$log_path/$name/last_revision.txt`letlower=\##已经开始搞增量备份并记录$upper,为下次备份搞准备工作$svn_admindump$svn_reporoot/$name-r$lower:$upper--incremental>$rar_store/$name/$lower-$upper.dumprm-f$log_path/a.tmpecho$upper>$log_path/$name/last_revision.txtecho******thistimewebakcupfrom$lowerto$log_path/$name/$name.logecho******backupended******>>$log_path/$name/$name.logdonecd$svn_backtar-zcvf$date.tar.gz$daterm-rf$svn_back/$date $upper******>>。
SVN服务器几种备份策略
SVN服务器几种备份策略SVN服务器几种备份策略(本文例子基于FreeBSD/Linux实现,windows环境请自己做出相应修改)配置管理的一个重要使命是保证数据的安全性,防止服务器应硬盘损坏、误操作造成数据无法恢复的灾难性后果。
因此制定一个完整的备份策略非常重要。
一般来说,备份策略应规定如下几部分内容:备份频度、备份方式、备份存放地点、备份责任人、灾难恢复检查措施及规定。
备份频度、存放地点等内容可以根据自己的实际情况自行制定;本文重点描述备份方式。
svn备份一般采用三种方式:1)svnadmin dump 2)svnadmin hotcopy3)svnsync.注意,svn备份不宜采用普通的文件拷贝方式(除非你备份的时候将库暂停),如copy命令、rsync命令。
笔者曾经用rsync命令来做增量和全量备份,在季度备份检查审计中,发现备份出来的库大部分都不可用,因此最好是用svn本身提供的功能来进行备份。
优缺点分析:==============第一种svnadmin dump是官方推荐的备份方式,优点是比较灵活,可以全量备份也可以增量备份,并提供了版本恢复机制。
缺点是:如果版本比较大,如版本数增长到数万、数十万,那么dump的过程将非常慢;备份耗时,恢复更耗时;不利于快速进行灾难恢复。
个人建议在版本数比较小的情况下使用这种备份方式。
第二种svnadmin hotcopy原设计目的估计不是用来备份的,只能进行全量拷贝,不能进行增量备份;优点是:备份过程较快,灾难恢复也很快;如果备份机上已经搭建了svn 服务,甚至不需要恢复,只需要进行简单配置即可切换到备份库上工作。
缺点是:比较耗费硬盘,需要有较大的硬盘支持(俺的备份机有1TB空间,呵呵)。
第三种svnsync实际上是制作2个镜像库,当一个坏了的时候,可以迅速切换到另一个。
不过,必须svn1.4版本以上才支持这个功能。
优点是:当制作成2个镜像库的时候起到双机实时备份的作用;缺点是:当作为2个镜像库使用时,没办法做到“想完全抛弃今天的修改恢复到昨晚的样子”;而当作为普通备份机制每日备份时,操作又较前2种方法麻烦。
Linux系统备份脚本使用Shell脚本实现对Linux系统文件的自动备份
Linux系统备份脚本使用Shell脚本实现对Linux系统文件的自动备份随着信息技术的快速发展,数据备份变得越来越重要。
对于Linux 系统而言,备份系统文件是保护数据安全的重要手段之一。
本文将介绍如何使用Shell脚本实现对Linux系统文件的自动备份。
一、备份目标确定在开始编写备份脚本之前,首先要确定备份目标。
可以选择备份整个系统或者只备份关键文件和目录。
根据具体需求,可以自行调整备份策略。
二、Shell脚本编写为了实现自动备份,我们利用Shell脚本来编写备份脚本。
以下是一个简单的备份脚本示例:```#!/bin/bash# 备份目录backup_dir="/path/to/backup"# 备份文件名backup_file="backup_$(date +%Y%m%d).tar.gz"# 需要备份的文件目录files_to_backup=("/etc""/home/user/documents""/var/log")# 创建备份目录mkdir -p $backup_dir# 执行备份tar -zcvf $backup_dir/$backup_file ${files_to_backup[@]}```上述脚本中,我们首先定义了备份目录、备份文件名和需要备份的文件目录。
然后通过命令`mkdir -p`创建备份目录。
最后使用`tar`命令将指定的文件目录打包成一个.tar.gz文件,并保存到备份目录中。
三、定时执行备份脚本为了实现自动备份,我们可以将备份脚本设置为定时任务。
通过设置Cron表达式,可以定期执行备份任务。
以下是一个例子:```# 编辑Crontab任务crontab -e# 添加备份任务0 3 * * * bash /path/to/backup_script.sh```上述例子中,我们使用`crontab -e`命令编辑Crontab任务,并添加一条定时执行备份脚本的任务。
如何使用Shell脚本编写文件备份和恢复工具
如何使用Shell脚本编写文件备份和恢复工具Shell脚本是一种强大的工具,可以帮助我们自动化各种任务。
在日常工作中,文件备份和恢复是非常重要的工作之一。
本文将介绍如何使用Shell脚本编写文件备份和恢复工具。
一、文件备份工具的编写在编写文件备份工具之前,我们首先需要确保Shell脚本的执行环境已经安装好。
一般来说,大部分Unix/Linux系统默认安装了Shell脚本执行环境。
1. 确定备份目录和目标目录首先,我们需要确定备份的源文件目录和目标备份目录。
可以通过以下Shell命令获取当前目录:```shellsrc_dir=$(pwd)```接下来,我们可以设置一个目标备份目录,用于存储备份文件:```shelldest_dir="/backup"```2. 判断目标备份目录是否存在在备份文件之前,我们需要判断目标备份目录是否已经存在。
如果不存在,我们可以通过以下Shell命令创建该目录:```shellif [ ! -d "$dest_dir" ]; thenmkdir -p "$dest_dir"fi```3. 备份文件接下来,我们需要编写备份文件的代码。
这里我们可以使用`cp`命令来实现文件的备份。
可以通过以下Shell命令来完成备份:```shellcp -r "$src_dir" "$dest_dir"```4. 完善备份工具除了备份文件外,我们还可以添加一些其他功能来完善备份工具。
例如,可以在备份过程中显示进度条,或者在备份完成后发送邮件通知等。
这需要根据具体需求进行修改和扩展。
二、文件恢复工具的编写在备份文件之后,我们还需要编写文件恢复工具来实现文件的还原。
下面将介绍如何使用Shell脚本编写文件恢复工具。
1. 确定源备份目录和目标还原目录首先,我们需要确定源备份目录和目标还原目录。
利用命令进行简单的增量文件夹备份(winlinux)
利用命令进行简单的增量文件夹备份(winlinux)这两天突然看到一个需求点,需要实现增量备份的功能,找了一些资料记录一下如下命令,该命令可以利用命令行进行简单的增量备份功能。
每个参数具体的值可以参考 xcopy /? 的输出结果Linux下可以通过强大的 rsync 命令进行,此命令还是非常强劲的,具体用法可以man一下,或者google一下。
当然windows下面也可以用rsyncWindows的那个Xcopy的备份命令的参数介绍:复制文件和目录树。
XCOPY source [destination] [/A | /M] [/D[:date]] [/P] [/S [/E]] [/V] [/W][/C] [/I] [/Q] [/F] [/L] [/G] [/H] [/R] [/T] [/U][/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z][/EXCLUDE:file1[+file2][+file3]...]source 指定要复制的文件。
destination 指定新文件的位置和/或名称。
/A 只复制有存档属性集的文件,但不改变属性。
/M 只复制有存档属性集的文件,并关闭存档属性。
/D:m-d-y 复制在指定日期或指定日期以后更改的文件。
如果没有提供日期,只复制那些源时间比目标时间新的文件。
/EXCLUDE:file1[+file2][+file3]...指定含有字符串的文件列表。
每一个字符串必须在文件的单独行中。
如果有任何字符串与要被复制的文件的绝对路径相符,那个文件将不会得到复制。
例如,指定如 \obj\ 或 .obj 的字符串会排除目录 obj 下面的所有文件或带有.obj 扩展名的文件。
/P 创建每个目标文件前提示。
/S 复制目录和子目录,除了空的。
/E 复制目录和子目录,包括空的。
与 /S /E 相同。
可以用来修改 /T。
/V 验证每个新文件。
/W 提示您在复制前按键。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#!/bin/sh
##Subversion的安装目录及执行文件
SVN_HOME=/usr/local/subversion/bin
SVN_ADMIN=$SVN_HOME/svnadmin
SVN_LOOK=$SVN_HOME/svnlook
SVN_BACK=/home1/svnbackups/full
##配置库根目录
SVN_REPOROOT=/home1/svnroot/hxz
##增量备份文件存放路径
date=$(date '+%Y-%m-%d')
RAR_STORE=$SVN_BACK/$date
if [ ! -d "$RAR_STORE" ];then
mkdir -p $RAR_STORE
fi
##读取项目库列表
cd $SVN_REPOROOT
for name in $(ls)
do
##开始做全量备份
$SVN_ADMIN hotcopy $SVN_REPOROOT/$name $RAR_STORE/$name
cd $SVN_BACK/$date
tar zcvf $name.tar.gz $name
rm -rf $RAR_STORE/$name
done
##备份打包压缩
# package the backup folder
#cd $SVN_BACK/$date
#tar zcvf $name.tar.gz $name
#rm -rf $RAR_STORE/$name
#!/bin/sh
#Subversion的安装目录及执行文件
SVN_HOME=/usr/local/subversion/bin
SVN_ADMIN=$SVN_HOME/svnadmin
SVN_LOOK=$SVN_HOME/svnlook
SVN_BACK=/home1/svnbackups/increment
##配置库根目录
SVN_REPOROOT=/home1/svnroot/hxz
##增量备份文件存放路径
date=$(date '+%Y-%m-%d')
RAR_STORE=$SVN_BACK/$date
if [ ! -d "$RAR_STORE" ];then
mkdir -p $RAR_STORE
fi
##日志存放目录
Log_PATH=/home1/svnbackups/log
if [ ! -d "$Log_PATH" ];then
mkdir -p $Log_PATH
fi
##读取项目库列表
cd $SVN_REPOROOT
for name in $(ls)
do
if [ ! -d "$RAR_STORE/$name" ];then
mkdir $RAR_STORE/$name
fi
cd $RAR_STORE/$name
if [ ! -d "$Log_PATH/$name" ];then
mkdir $Log_PATH/$name
fi
echo ******Starting backup from $date****** >> $Log_PATH/$name/$name.log
echo ******svn repository $name startting to backup****** >> $Log_PATH/$name/$name.log $SVN_LOOK youngest $SVN_REPOROOT/$name > $Log_PATH/A.TMP
UPPER=`head -1 $Log_PATH/A.TMP`
##取出上次备份后的版本号,并做+1处理
NUM_LOWER=`head -1 $Log_PATH/$name/last_revision.txt`
let LOWER="$NUM_LOWER+1"
##开始做增量备份并记录$UPPER,为下次备份做准备
$SVN_ADMIN dump $SVN_REPOROOT/$name -r $LOWER:$UPPER --incremental > $RAR_STORE/$name/$LOWER-$UPPER.dump
rm -f $Log_PATH/A.TMP
echo $UPPER > $Log_PATH/$name/last_revision.txt
echo ******This time we bakcup from $LOWER to $UPPER****** >> $Log_PATH/$name/$name.log
echo ******Back up ended****** >> $Log_PATH/$name/$name.log
done
cd $SVN_BACK
tar -zcvf $date.tar.gz $date
rm -rf $SVN_BACK/$date。