backup репозитория svn
От: Anton Batenev Россия https://github.com/abbat
Дата: 01.02.06 05:55
Оценка: 15 (4)
Hello, All!

По мотивам этой
Автор: Anton Batenev
Дата: 31.01.06
ветки. Может, кому-нибудь еще поможет.

Исходная задача: есть репозиторий svn, который надо бэкапить, архивировать, выкладывать архивы на сетевую шару и хранить там N последних архивов на случай, если где-то что-то пошло не так с этими бэкапами. Смежная задача — бэкап любого набора данных (например, баз 1С) и хранение нескольких последних копий архивов.

Сам по себе, процесс бэкапа и архивирования данных особых сложностей обычно не представляет. Представляет сложность реализация механизма хранения N последних бэкапов. Хотелось найти простое и более-менее элегантное решение без написания еще одного "наколенного" EXE-шника. Вот что получилось:

REM *** путь к репозиторию ***
SET REPO_PATH=d:\svn

REM *** имя файла бэкапа ***
SET BACKUP_NAME=svn.dump

REM *** путь к бэкапу ***
SET BACKUP_PATH=\\server_name\share_name

REM *** количество архивных копий ***
SET BACKUP_COUNT=7

REM *** разбор строки даты %DATE% для формирования имен файлов ***
SET DD=%DATE:~-10,2%
SET MM=%DATE:~-7,2%
SET YYYY=%DATE:~-4,4%

REM *** разбор строки времени %TIME% для формирования имен файлов ***
SET HH=%TIME:~0,2%
SET NN=%TIME:~3,2%
SET SS=%TIME:~6,2%

REM *** формирование полного имени файла бэкапа (с датой и временем создания) ***
SET BACKUP_NAME=%YYYY%-%MM%-%DD%_%HH%-%NN%-%SS%_%BACKUP_NAME%

REM *** создание дампа репозитория ***
svnadmin.exe dump "%REPO_PATH%" --deltas > "%BACKUP_NAME%"
IF NOT %ERRORLEVEL% == 0 GOTO EXIT

REM *** архивирование дампа с удалением архивных файлов ***
rar.exe a -df -m5 -md4096 -s "%BACKUP_NAME%.rar" "%BACKUP_NAME%"
IF NOT %ERRORLEVEL% == 0 GOTO EXIT

REM *** перемещение архива в директорию бэкапа ***
MOVE "%BACKUP_NAME%.rar" "%BACKUP_PATH%\%BACKUP_NAME%.rar"
IF NOT %ERRORLEVEL% == 0 GOTO EXIT

REM *** перебор всех файлов в директории бэкапа и удаление старых (ради чего все и писалось) ***
FOR /F "skip=%BACKUP_COUNT%" %%F IN ('DIR /B /O-N "%BACKUP_PATH%"') DO DEL /Q /F "%BACKUP_PATH%\%%F"

:EXIT
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.