Как стать автором
Обновить

Комментарии 46

Сделал себе нечто подобное, но для бэкапа целого раздела + вращение бэкапов(держу последние 10) + очистка корзины ^_^ + выключение компьютера после выполнения
разве что бэкап делаю штатными средствами винды: ntbackup

Кстати, формат даты, если мне не изменяет память, зависит от настроек формата даты и времени в системе
md "%date:~6,4%_%date:~3,2%_%date:~0,2%"
Спасибо за подсказку. Я догадывался, что такое возможно :)
не за что ;)
только заметил, что у тебя кстати системная дата по-другому настроена
тебе эти манипуляции помогли?
Строка работает, только в таком виде:

md %DATE:~9,4%-%DATE:~6,2%-%DATE:~3,2%

Как это в переменную загнать и потом эту переменную использовать - непонятно, полдня мучаюсь.
это что ж за письменность такая?! О_О
шайтан...
Это делается для того, что бы получить дату YYYY_MM_DD (2007_12_18). В таком случае папки будут "отсортированы по времени".

Намного удобнее, чем искать среди понедельников нужную дату, особенно если этот день вторник! ;)
это ясно; неясно как на свет появилась группа чудовищ %date:~6,4%, %date:~3,2%, %date:~0,2% и по какому принципу они существуют >>8-]
это выбираются подстроки из возвращаемой даты %date%
тоесть имеем системную дату 18.12.2007
конструкция вида %date:~6,4% вернет из даты 4 символа начиная с 6го
хитро :))
спасибо за просвещение
К mysqldump полезно добавлять --all --opt
> Линуксоиды могут легко переписать этот скрипт для своей системы.

Я думаю, линуксоидов ты таким скриптом не удивишь.
Да, но "плюс" поставлю, за мысли в правильном направлении =)
Согласен :) У меня на домашнем ноуте много баш-скриптов своих, (например "кто и когда ходил по столу" :) под виндой они бесполезны.
...пожалейте компьютер :)
Subversion — мысль в нужном направлении. Но базу им не забекапить.
Кто мешает? комить /var/lib/mysql на здоровье по крону.
Есть сомнения, что сработает. Сами ребята из команды рекомендуют для бекапа
запускать их утилиты. Да и я сталкивался с тем, что копирования каталога
с данными недостаточно.
да, в принципе могут быть проблемы, если файлы таблиц в данный момент изменяются, но вот недостаточности я не понимаю, это и есть полные базы, чего тут может быть не достаточно?
Ну, короче, я имею в виду, что правильный бекап баз: через предназначенные
для этого утилиты, а потом уже через Subversion. И никакого обычного
копирования, иначе потом возможен геморрой.

У меня было такое, как раз с MySQL.
у Subversion есть еще хуки, ты запросто можешь в них загнать mysqldump
Им можно "забэкапить" абсолютно все.

Вставлю свою 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 - иконки выводимые в трее и сигнализирующие о работе задачи


Описание:
Задачи стартуют каждый день в 11:10 (можно поменять, разумеется), в трее появляются иконки с сопроводительным текстом при наведении. Когда резервирование будет закончено иконки 10 секунд мигают, сигнализирую о завершении операции.
У меня в nnCron'е стоит такой скрипт, все остальное "ложится" на nnBackUp и его конфиги (что копировать и куда)


<%
: 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
)#
До INI-слов я в свое время так и не докатился :\. +1 к карме вам, уж думал "ннкронщиков" тут и нет :).
Да, я тоже как-то INI-файлами не пользовался, у меня весь конфиг прямо в файле скрипта задавался. Форт - весьма удобная штука, как ни странно.
А еще на нем говорит Йода :).
Вроде бы можно без дампа выгребать МУД файлы прям из дериктории мускула.
Только остановив сам MYSQL - иначе можно ТАКОГО навыгребать. А останавливать его часто не хочется...
Надо бы сделать такую вещь, но расширыть ее до того что после архивации шлется запрос на другой сервер, и тот забирает архив к себе. Получается идет двойной бэкап, и вероятность что ничего не случится с архивами увеличивается вдвое.
Может просто скопировать на другой сервер, по окончании ?
НЛО прилетело и опубликовало эту надпись здесь
tar cvfz /home/my/backup/`date +%d.%m.%Y`.data.tar.gz /var/www
или даже в одну кучу
tar cvfz /home/my/backup/`date +%d.%m.%Y`.sql.tar.gz /home/my/backup/`date +%d.%m.%Y`.sql /var/www
"C:\Program Files\WinRAR\rar.exe" — это не тру. Лучше прописывать PATH и вызывать просто через rar. А еще лучше держать такие вещи в одной папочке отдельной.
У меня не получилось, ибо винда - дело такое... Не стал умничать - тупо напрямую вызывается.
http://www.bacula.org/

Поддерживает Windows/Linux/BSD/чорта-в-ступе, OpenSource, умеет работать с базюками, централизованно управляется, имеет веб-интерфейс.

Чего еще для счастья-то надо?
Для полного счастья хотелось-бы incremental MySQL backup...
А то у меня база крутится вот уже скоро 10 лет, соответственно, то что я получаю по
mysqldump databasename | gzip -9 > database_`date +%Y-%m-%d`.sql.gz
Занимает 1.6Gb, хотя реальных изменений в базе существенно меньше.
Так что хотелось-бы иметь по-недельный бакап:
- воскресенье снимаем полный бекап,
- с понедельника по субботу только изменения,
- плюс вчерашний полный бакап.
Это так сказать предел мечтаний.

И что-бы один месяц работы помещался-бы на один оптический диск (DVD BlueRay или что там сейчас в моде)
Ленточки конечно хорошо, но болванки получаются дешевле.

P.S.
Для файлов подобный алгоритм существует, а вот с базой данных...

P.P.S.
Пытался развлекаться с mysqldump -X + xmldiff, но тут не все так гладко как хотелось-бы.
может это поможет
http://shareexp.blogspot.com/2006/07/backup-mysql.html
после архивации бэкапы весьма удобно складывать в Amazon S3, с помощью s3cmd
чтобы так не мучаться с датой, можно использовать встроенные возможности самого РАР-а
если я сейчас правильно нашел параметр, то это ag[format]:

> rar a -agYYYYMMDD test.rar *.*

Creating archive test20071224.rar...
Эх, не успел, опередили про опцию -ag...
Давным-давно себе забиднил вызов архивации каталога с таймстампом на короткий батник bu
Таска архивирование дерева проекта для Ant'а:








Ещё раз пробую.

Таска архивирование дерева проекта для Ant'а:

<target name="backup" depends="cleantmp" description="Архивирование проекта">
<tstamp>
<format property="backup.timestamp" pattern="yyyyMMddHHmm">
</tstamp>
<delete file="${backup.home}/${project.name}-${backup.timestamp}.zip" failonerror="true">
<zip destfile="${backup.home}/${project.name}-${backup.timestamp}.zip" compress="true">
<fileset dir="${basedir}" includes="**/*">
</zip>
</target>
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории