Pull to refresh

Ежедневный backup Atlassian JIRA и Confluence для Windows

Reading time 2 min
Views 9K


Задача:
  • Ежедневный 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
Tags:
Hubs:
+5
Comments 3
Comments Comments 3

Articles