

Задача:
- Ежедневный backup mysql базы данных для JIRA и Confluence;
- Ежедневный backup директорий с attachments;
- Архивирование всех сделанных backup'ов;
- Удаление старых backup'ов.
Оговорюсь, что мне это нужно было сделать для Windows и я понимаю, что для Linux все делается проще и быстрее. Также если вы являетесь администратором, то данный топик вряд ли будет вам интересен и ничего нового вы не узнаете. Но можете использовать написанное, как готовое и проверенное решение.
Для начала определимся с переменными:
::Директория с вашими Attachments для JIRA или Confluence
set attachments="C:\Program Files\Atlassian\Application Data\JIRA\data"
::Директория, куда будут сохраняться ежедневные backups
set backup_folder=D:\Backups\Atlassian\JIRA\daily_backups
::Путь к файлу mysqldump.exe
set mysqldump_path="C:\Program Files\MySQL\MySQL Server 5.5\bin\mysqldump.exe"
:: Пользователь MySQL
set dbuser=root
:: Пароль пользователя MySQL
set dbpass=<change password>
:: База данных, которую мы хотим бэкапить (JIRA или Confluence)
set dbname=jiradb
Каждый бэкап должен иметь уникальное имя, для его генерации можно использовать год, месяц, день и временной интервал.
For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set dt=%%c-%%a-%%b)
For /f "tokens=1-4 delims=:." %%a in ('echo %time%') do (set tm=%%a%%b%%c%%d)
set backupdate=%1%dt%_%tm%
set date_folder=%1%dt%
Вы можете корректировать ваше имя как вам удобно, в моем случае формат такой: [db name].YYYY-MM-DD_tt
Переменную date_folder я завел для того, чтобы каждый день создавалась папка YYYY-MM-DD и в нее складывались backups.
Соответственно если директории нету, то создаем ее:
if exist %backup_folder%\%date_folder% GOTO NODIR
mkdir %backup_folder%\%date_folder%
:NODIR
Далее, выполняем обычный backup базы данных при помощи mysqldump, архивируем при помощи 7zip и удаляем заархивированный файл.
%mysqldump_path% --user=%dbuser% --password=%dbpass% --databases %dbname% > "%backup_folder%\%date_folder%\%dbname%.%backupdate%.sql"
"zip\7za.exe" a -tzip "%backup_folder%\%date_folder%\%dbname%.%backupdate%.zip" "%backup_folder%\%date_folder%\*.sql"
del "%backup_folder%\%date_folder%\*.sql"
Не забываем заархивировать папку с attachments:
"zip\7za.exe" a -tzip %backup_folder%\%date_folder%\attachments.%backupdate%.zip %attachments%
И все что нам остается это удалить старые директории (старше 14 дней).
forfiles -p %backup_folder% -s -d -14 -c "cmd /c if @isdir == TRUE rd /s /q @path"
Все что нам остается это скормить этот bat файл Windows Task Sheduler и указать, чтобы таск срабатывал каждый день.
P.S. Если таск не срабатывает, проверьте, чтобы стояла галочка, что таск должен выполняться даже тогда, когда пользователь, от чьего имени запускается таск, не залогинен, и что у этого пользователя есть права на запись. Также, не забудьте указать, чтобы таск выполнялся в директории, в которой лежит скрипт. (Для тасков это необязательный параметр, но без этого таск отрабатывал, но скрипт не запускал.)
P.P.S. Если кому скрипт оказался полезным, то его можно скачать здесь: download