Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Вставлю свою win32 копеечку. У меня как резервирование, так и ротация осуществляется связкой nncron + nnbackup.
ДокументРуты виртуальных хостов тестового apache и базы тестовой mysql находились, соответственно в d:\www\ApachePhpMysql\apache\home и d:\www\ApachePhpMysql\mysql\data. Причем имена директорий виртуальных хостов имели вид local_*.
Задача решалась просто - обходом соответствующих директорий, выделение имен и применение нужных команд для резервирования всего и вся в стэк zip архивов или директорий силами nnbackup, которая сама контролирует длину стэка.
Обе задачи на языке FORTH выглядят следующим образом:
базы данных:
#( backup_db_dumps
Time: 10 11 * * * *
VARIABLE dmpbk_icon_id
VARIABLE dmpbk_icon_done?
CREATE dmphd_dir 256 ALLOT
CREATE dmpfnd_srv 50 ALLOT
Action:
S" nnCron: выполняется дампирование и архивация баз данных" S" d:\system\icons\BackUp.ico" LoadIcon ADD-TI
dmpbk_icon_id !
FOR-FILES: "d:\www\ApachePhpMysql\mysql\data\*"
IS-DIR?
IF
S" %FOUND-FULLPATH%" EVAL-SUBST dmphd_dir PLACE
RE-MATCH: "%dmphd_dir COUNT%" "/(db_[\w]+)$/i"
IF
S" %$1%" EVAL-SUBST dmpfnd_srv PLACE
FILE-DELETE: "d:\system\backup\tmp\*.*"
\ простое дампирование
StartIn: "d:\www\ApachePhpMysql\mysql\bin"
SWHide NormalPriority
START-APPW: "mysqldump --databases %dmpfnd_srv COUNT% --host=localhost --user=root --password=prison --opt --allow-keywords > d:\system\backup\tmp\%dmpfnd_srv COUNT%.sql"
\ дамп без опции удаления существующей базы
StartIn: "d:\www\ApachePhpMysql\mysql\bin"
SWHide NormalPriority
START-APPW: "mysqldump --databases %dmpfnd_srv COUNT% --host=localhost --user=root --password=prison --opt --allow-keywords --no-create-db > d:\system\backup\tmp\%dmpfnd_srv COUNT%(no_create_db).sql"
FILE-EXIST: "d:\system\backup\mysql\%dmpfnd_srv COUNT%" 0=
IF
DIR-CREATE: "d:\system\backup\mysql\%dmpfnd_srv COUNT%"
THEN
StartIn: "D:\programs\utils\system\nnbackup"
SWHide NormalPriority
START-APPW: nnbackup.exe ver -n 7 -i "d:\system\backup\tmp" -o d:\system\backup\mysql\%dmpfnd_srv COUNT%
THEN
THEN
;FOR-FILES
dmpbk_icon_done? OFF
20 0 DO
dmpbk_icon_done? @
IF
S" nnCron: дампирование и архивация баз данных успешно завершены" S" d:\system\icons\BackUpDone.ico" LoadIcon
dmpbk_icon_done? OFF
ELSE
S" nnCron: дампирование и архивация баз данных успешно завершены" S" d:\system\icons\BackUp.ico" LoadIcon
dmpbk_icon_done? ON
THEN
dmpbk_icon_id @ MODIFY-TI
PAUSE: 1000
LOOP
dmpbk_icon_id @ DEL-TI
)##( backup_srvs
Time: 10 11 * * * *
VARIABLE srvsbk_icon_id
VARIABLE srvsbk_icon_done?
CREATE srvshd_dir 256 ALLOT
CREATE srvsfnd_srv 50 ALLOT
Action:
S" nnCron: выполняется архивация локальных серверов" S" d:\system\icons\BackUp.ico" LoadIcon ADD-TI
srvsbk_icon_id !
FOR-FILES: "d:\www\ApachePhpMysql\apache\home\*"
IS-DIR?
IF
S" %FOUND-FULLPATH%" EVAL-SUBST srvshd_dir PLACE
RE-MATCH: "%srvshd_dir COUNT%" "/(local_[\w]+)$/i"
IF
S" %$1%" EVAL-SUBST srvsfnd_srv PLACE
FILE-EXIST: "d:\system\backup\local_servers\%srvsfnd_srv COUNT%" 0=
IF
DIR-CREATE: "d:\system\backup\local_servers\%srvsfnd_srv COUNT%"
THEN
StartIn: "D:\programs\utils\system\nnbackup"
SWHide NormalPriority
START-APPW: nnbackup.exe ver -n 3 -i "d:\www\ApachePhpMysql\apache\home\%srvsfnd_srv COUNT%" -o d:\system\backup\local_servers\%srvsfnd_srv COUNT% -s -e -p1
THEN
THEN
;FOR-FILES
srvsbk_icon_done? OFF
20 0 DO
srvsbk_icon_done? @
IF
S" nnCron: архивация локальных серверов успешно завершена" S" d:\system\icons\BackUpDone.ico" LoadIcon
srvsbk_icon_done? OFF
ELSE
S" nnCron: архивация локальных серверов успешно завершенаы" S" d:\system\icons\BackUp.ico" LoadIcon
srvsbk_icon_done? ON
THEN
srvsbk_icon_id @ MODIFY-TI
PAUSE: 1000
LOOP
srvsbk_icon_id @ DEL-TI
)#d:\system\backup\tmp - временное хранилище файлов выполняемого на данном этапе резервирования
d:\system\backup\mysql - место для хранения стэка копий баз данных
d:\system\backup\local_servers - место для хранения стэка копий виртуальных хостов
d:\system\icons\BackUp[Done].ico - иконки выводимые в трее и сигнализирующие о работе задачи
<%
: nnSoftPath S" C:\Utility\nnSoft";
: nnBackUpConfig S" C:\Utility\nnSoft\nnBackup\cfg\config.ini";
%>
#( DumpDocuments
SingleInstance
NoLog
OnceADay
VARIABLE vDumpDocuments
Action:
PAUSE: 5000 5000 (CPU-USAGE) 20 >
IF
CLEAR-ONCE
ELSE
S" DumpDocuments" CRON-LOG
nnBackUpConfig INI-FILENAME
S" Documents" INI-SECTION
S" Dump" INI-GET-VALUE S>NUM vDumpDocuments !
vDumpDocuments @ 9 > vDumpDocuments @ 0 < OR
IF vDumpDocuments 0!
THEN
ShowMinimized IdlePriority
StartIn: "C:\Utility\nnSoft\nnBackup\cfg\documents\"
START-APPW: "%nnSoftPath%\nnBackup\nnbackup.exe dump %vDumpDocuments @% -dn %vDumpDocuments @% %nnSoftPath%\nnBackup\cfg\documents\backup.cfg"
ExitCodeProc 0 =
IF vDumpDocuments @ 8 >
IF vDumpDocuments 0!
ELSE vDumpDocuments 1+!
THEN
S" Dump" vDumpDocuments @ N>S INI-SET-VALUE
MOUSE-POS 10 - SWAP 10 - SWAP HINT-POS THINT: "Дампирование документов завершено!" 5
ELSE
CLEAR-ONCE
BEEP: 250 500
TMSG: "Ошибка дампирования документов!" 20
THEN
THEN
)#
Ежедневная архивация веб-проектов