Страница 1 из 1

Bacula, бекап различных сервисов

Добавлено: 2016-10-11 14:18:05
kharkov_max
День добрый.

Хочется на полную заюзать данную систему, и бекапить по возможности все.
Собственно удачно получилось бекапить пользовательскую файлопомойку с нужными файлами.
Получилось как бекапить так и восстанавливать старые версии при необходимости.
Full backup и его инкрименты круто сохранили место на хранилище.

Вот сейчас пытаюсь разобраться как к примеру можно бекапить БД.
Судя из возможности bacula это можно делать только запуская пользовательский скрипт на клиенте "ClientRunBeforeJob = /path/to/script".
Вот тут начинается мой вопрос.

А если скрипт не выполнился до конца, скажем выполнился как то частично, что в результате получит бакула?
Или в самом скрипте нужно отслеживать целосность бекапа и потом как то заставить бакулу ожидать передачи удачного параметра (что бекап прошел), а если параметр не вернулся (скрипт недовыполнился или не выполнился вообще) то генерировать ошибку бекапа ?

Собственно у кого какая была практика, как то хочется раскурить данный вопрос ...

Bacula, бекап различных сервисов

Добавлено: 2016-10-14 1:36:53
FiL
если скрипт выполнился с ошибкой, то эта ошибка будет в логе бакапа.
но вообще у меня что-то с бакулой не сложилось. как-то там всё не так, как я привык :(

Bacula, бекап различных сервисов

Добавлено: 2016-10-26 16:37:29
kharkov_max
Вернулся к данному вопросу.

Для бекапа jail, созданного ezjail написал скрипт

Код: Выделить всё

#!/bin/sh

ezjail="/usr/local/bin/ezjail-admin"
jailname=$1
backup_dir=$2
jailstop=$3

# ------------ Тело скрипта ------------------------
# Проверяем существование директории и если нет то создаем
if [ ! -d $backup_dir ];then
   mkdir -p $backup_dir
fi
# Если директория была, то очищаем...
rm -rf $backup_dir/*

# Бекап с остановкой Jail
if [ $jailstop -eq 1 ]; then
    $ezjail stop $jailname > /dev/null 2>&1
    $ezjail archive -f -a $jailname -d $backup_dir $jailname > /dev/null 2>&1
    $ezjail start $jailname > /dev/null 2>&1
fi

# Бекап без остановки Jail
if [ $jailstop -eq 0 ]; then
    $ezjail archive -f -a $jailname -d $backup_dir $jailname > /dev/null 2>&1
fi

chown -R bacula:bacula $backup_dir

exit 0
Скрипт из bacula запускаю так:

Код: Выделить всё

ClientRunBeforeJob = "/bin/sh /usr/home/Scripts/bacula-before-jail_backup.sh jail1 /usr/home/bacula-backup 1"
Где параметры скрипта:
- имя jail
- временный, локальный каталог бекапа для бакула
- флаг старт/стоп jail при бекапе.

Если настраиваю на реальный jail, то все бекапится, бакула себе зятягивает файл и в статусе Job пишет "OK".
Если указываю не существующий jail, то весь механизм отрабатывает, в статусе Job пишет "OK", но на самом деле скрипт ни чего не забекапил т.к. jail не существует.

Вот и вопрос как мне скриптом контролировать бекап и потом передать состояние бакуле ?

У кого какие идеи ?

Bacula, бекап различных сервисов

Добавлено: 2016-10-26 19:50:35
FiL
Так у тебя скрипт всегда 0 возвращает. Чего-ж ты хочешь?

Таки проверяй в скрипте ошибки и возвращай код ошибки какой-то из скрипта.

Bacula, бекап различных сервисов

Добавлено: 2016-10-27 0:18:31
Amadeus
Так, касательно БД

1) Исходя из боевого опыта работы с БД размером доХ и еще 10 раз по ДоХ если в качестве бекап системы вы хотите использовать бакулу, алгоритм следующий

- Кроном на сервере БД снимайте дамп
- Во время дампа желательно сразу еще жать его через pipe. Так как на некоторых базах, внезапно дамп может весить в 1,5 раза больше самой БД, так как там (в бд) данные сюриализованные. А дамп - в обычном виде текстовый файл
- Через некоторое время забирайте его бакулой простым файл сетом

Для дампов БД before скрипты не лучшее решение, так как некоторые дампы могут делаться крайне долго, и в итоге вы получите на бакуле - Network pipe или тому подобные ошибки.

2) Например, я не юзаю никаких оберток на джейлах. Простые снепшоты и zfs rcv в gz архив.
- Далее алгоритм такой же.

Бакула офигенная система. В плане сочетания юзабилити и возможностей которые она предоставляет. Главное уметь готовить

Отправлено спустя 5 минут 17 секунд:
Но то что я написал выше - это по сути когда уже идут реально большие объемы дампов.

Например у меня бакула в сутки ест около 100 гигов дампов с gzip 9


Если данных не так много, и укладывается в маленькое время само снятие - то да, тут можно использовать before скрипты

Отправлено спустя 6 минут 18 секунд:
kharkov_max писал(а): А если скрипт не выполнился до конца, скажем выполнился как то частично, что в результате получит бакула?

Касательно этого момента - невыполнение After/Before скрипта приводит к Error статусу задания в целом

При этом сам volume с бекапом, может и создастся. Но задание будет в Error статусе. И дальше уже, в зависимости от правил ротации volume - может и перезаписаться.

Bacula, бекап различных сервисов

Добавлено: 2016-10-27 0:25:44
FiL
Amadeus писал(а): Бакула офигенная система. В плане сочетания юзабилити и возможностей которые она предоставляет. Главное уметь готовить
Бакула офигенная система за свои деньги. Но в плане юзабилити и возможностей посравнению с нормальными системами - это жутко неудобный монстр.

Вот на днях у меня пришел юзер и попросил "вытащить из бакапа файлик 3-4-5 дневной давности, который у него был на десктопе в каталоге что-то там про TRPM7 и файл с #541 в названии". И вот такое на бакуле искать нужную версию непонятно какого файла непонятно где - повеситься можно (или я не нашел толкового UI). Потому как поднять полностью весь бакап легко и просто. А вот найти что-то...

Bacula, бекап различных сервисов

Добавлено: 2016-10-27 2:28:41
Amadeus
Бакула офигенная система за свои деньги
За чего простите?) Free версия системы позволяет на данный момент закрывать потребности проекта полностью + Free версия UI прекрасно дает интерфейс если надо. Их несколько. Я про UI. Про энтерпрайз версию сейчас речи не идет.

Есть два типа UI - только просмотрщики, и через которых можно минимально управлять и делать ресторы. Во втором типе - есть возможность искать по имени файла.

Но отчасти я тут согласен, запросы "Найди что то там, примерно тогда то" на больших объемах решать не быстро. Тут спорить не буду.

Отправлено спустя 10 минут 42 секунды:
Единственное уточнение
Во втором типе - есть возможность искать по имени файла.
Что бы вот этот тип работал адекватно - бекенд любая SQL база. sqllite - тут не подходит в принципе. Если хотите вещать на бакулу нормальный UI

Отправлено спустя 1 час 31 минуту 14 секунд:
Сейчас даже ради интереса проверил.

1) Поиск по части имени файла - присутствует. Выдает все задания, которые содержаться в базе
2) Восстановление задания по клику из поиска - работает в полной мере
3) Восстановление отдельного файла по клику из поиска - бажное, но если кому то надо будет - UI открытый, там даже понятно по сути в чем баг. Любому php программисту исправить час +-. Не программисту - если задаться целью чуть больше - но смысл не меняется. Там код в этом плане детский.

Bacula, бекап различных сервисов

Добавлено: 2016-10-27 3:50:10
Neus
бекенд любая SQL база
Самое время задать каверзный вопрос: как бэкапить бакулу? ;)

Bacula, бекап различных сервисов

Добавлено: 2016-10-27 7:41:37
kharkov_max
1. Neus, Смотря что Вы понимаете под бекапом бакулы ...

Если бекап бекапов, то это не имеет смысла.
А если нужно после того как поломался сервер его шустро развернуть, то достаточно конфигурационных файлов.
У меня директор в jail, я тупо jail бекаплю и все ...

2. Для web доступа я использую Baculum, скромно, но все устраивает.
Статусы заданий видно, файлы восстановить можно.
Поиском еще не игрался ...

3. Amadeus,
Тот механизм что Вы описали по бекапу больших БД и т.д., я прекрасно понимаю.
На данный момент у меня нет таких больших сервисов бекапля которые через before я получил бы в бакуле большую задержку.

Я привел как пример бекап Jail, но этот вопрос касается и бекапа БД и т.д.

Вот к примеру по бекапу БД.
Как правильно написать скрипт бекапа какойто БД MySQL, что бы в случае ошибки, mysqldump что то вернул скрипту.
Допустим я указал mysqldump не существующую БД, как скрипту получить эту ошибку?
Или допустим при удачном бекапе передавать скрипту состояние OK.

На сколько я понимаю дале точно так же эту ошибку можно передать и в бакулу...
И в статусе задания в состоянии Fail, возможно можно будет увидеть ошибку от mysqldump.

Или я не прав?

Bacula, бекап различных сервисов

Добавлено: 2016-10-27 8:20:05
FiL
web-based интерфейсы я не рассматривал. не люблю я веб. Я пытался пользоваться bat'ом. Ужасно кривая хрень.
То есть опять-таки, за свои деньги (именно, что за бесплатно) - весьма даже. Но как толковый рабочий инструмент - не, не тянет.
Но раз говорите, что вебовская морда поприличнее, то я посмотрю.

Но просто поиск по маске нихрена не поможет. У меня в каждой лабе по несколько десятков юзеров, все они работают на более-менее одних и тех-же проектах. От каждого проекта есть туча файлов, разбросанных в зависимости от версии и под-проекта по разным фолдерам. Если я на бакапе запрошу поиск файла по маске "*#541*", то я получу список из сотни километровых путей, из которых таки зело неудобно выбирать нужный. Мне нужен не поиск (вернее поиск тоже нужен, но это реже), а нормальный способ просмотреть дерево файлов и каталогов, чтоб можно было походить, посмотреть, показать юзеру в таком виде в котором он это поймет, найти нужный файл и по каждому файлу возможность посмотреть историю сохраненных версий. И если мне система бакапа такой возможности не предоставляет, то мне таки ей пользоваться неудобно.

Что касается скриптов, то таки mysqldump вполне себе возвращает код завершения. И его вполне можно ловить и обрабатывать ( $? ). Ну и соответственно завершать свой скрипт с таким-же (или иным) кодом.

Bacula, бекап различных сервисов

Добавлено: 2016-10-27 9:12:42
kharkov_max
FiL, Если у вас все так плохо может как бекап использовать нечто как SVN или GIT, там и версионность и т.д.
И его вполне можно ловить и обрабатывать ( $? )
Покажите кодом пожалуйста...

Bacula, бекап различных сервисов

Добавлено: 2016-10-27 15:30:57
FiL

Код: Выделить всё

#!/bin/bash

$db = $1
$dir = $2
$fname = $(date +%y.%m.%d)

mysqlbackup $db > $dir/db-$fname.sql

if [ $? -eq 0 ]
then
  exit 0
else
  echo "mysql backup failed."
  exit 2
fi
Ну и далее обработать по вкусу.

Bacula, бекап различных сервисов

Добавлено: 2016-10-27 16:11:15
kharkov_max
Спасибо ...
Попробую поиграться ...

Bacula, бекап различных сервисов

Добавлено: 2016-11-16 16:06:18
ertaklimaxa
такое возможно?