多年前怎么备份的不记得了。好像不是我备份的吧?
现在的小公司,很多同事居然还没版本的管理的习惯。想想前几天因为不熟悉git命令,错误的执行了clean,丢了几个页面,重做一次。真是感慨,胆大也要心细才好~
visualsvn server安装在某个虚拟机上。之前是打算备份整个虚拟机的。查了一下资料,VMware的备份好复杂的说,不想琢磨了(还得下载相关软件,得恢复验证)。考虑到主要的资料就是redmine,以及svn。虚拟机就简单快照好了,redmine跟svn再手动备份出来到另一块移动硬盘。虚拟机加了个分区,准备做svn的定时备份。
备份及恢复的脚本参考:https://blog.csdn.net/lnfxcf/article/details/104273156?utm_medium=distribute.pc_relevant_t0.none-task-blog-searchFromBaidu-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-searchFromBaidu-1.control
svn备份脚本
比较了网上查阅的三个备份方案,选择了svnadmin hotcopy
echo off
rem Subversion的安装目录
set SVN_HOME="E:\Program Files\VisualSVN Server"
rem 所有版本库的父目录
set SVN_ROOT=E:\Repositories
rem 备份的目录
set BACKUP_SVN_ROOT=E:\Backup
set BACKUP_DIRECTORY=%BACKUP_SVN_ROOT%\%date:~0,4%_%date:~5,2%_%date:~8,2%
if exist %BACKUP_DIRECTORY% goto checkBack
echo 建立备份目录%BACKUP_DIRECTORY%>>%SVN_ROOT%/backup.log
md %BACKUP_DIRECTORY%
rem 验证目录是否为版本库,如果是则取出名称备份
for /r %SVN_ROOT% %%I in (.) do @if exist "%%I\conf\svnserve.conf" .\simpleBackup.bat "%%~fI" %%~nI
goto end
:checkBack
echo 备份目录%BACKUP_DIRECTORY%已经存在,请清空。
goto end
:end
此处根据实际的原目录及备份目标目录稍作调整即可。在目标目录中,会创建2020-12-23这样的日期文件夹
svn恢复脚本
echo off
rem Subversion的安装目录
set SVN_HOME="C:\Program Files\VisualSVN Server"
rem 所有版本库的父目录
set SVN_ROOT=D:\Repositories
rem 备份的目录
set BACKUP_SVN_ROOT=D:\data\Repositories
rem 验证目录是否为版本库,如果是则取出名称备份
for /d %%I in (%BACKUP_SVN_ROOT%\*) do .\simpleRecover.bat "%%~fI" %%~nI
goto end
:end
用户权限
以上博文未提到用户权限的备份,实际仅备份库文件,users是空的。查阅了这篇:https://www.jianshu.com/p/e2bc620c4ef5。文章谈到,备份库目录下的这三个文件即可。
我最早把库目录设置在C盘,由于虚拟机空间分配不足,后来增加了磁盘空间,移到了E分区。发现新的库目录下,居然少了VisualSVN-GlobalWinAuthz.ini。我把原来的VisualSVN-GlobalWinAuthz.ini拷贝到E分区下的库目录,备份出来,再切换目录验证,不成功。users还是空的。
尝试切换到原库目录,从users下导出列表为*.txt。把这个txt文件放到库目录同级下,重启visualsvn server,用户列表以及权限,都正常了。
至此解决了权限备份的问题。
svn定时备份
增量备份策略采取每日晚上9点运行一次。在os中创建计划脚本运行。
全备份策略采取每周五晚9点运行一次。