powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Бекап базы на Яндекс-диск
19 сообщений из 19, страница 1 из 1
Бекап базы на Яндекс-диск
    #39603608
Игорь Гурьянов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приведу пример организации бекапа небольшой (но важной :)) базы, может кому-то будет полезным.
Так же буду признателен за дельные комментарии/советы от более опытных товарищей.

Сервер Ubuntu 16.04.3 LTS, Firebird 3.0.2

Основные моменты:
После бекапа выполняется тестовый рестор и сборка мусора

Бекап архивируется и копируется на яндекс-диск

Устаревшие бекапы удаляются, при этом локально сохраняется 5 бекапов, на яндекс-диске 62 бекапа (за два месяца)

Лог с результатами всех операций отправляется на почту, по теме письма можно сориентироваться были ли ошибки

backup_db.sh
Скрипт запускается кроном по ночам.
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
#!/bin/bash

# Настройки базы данных
DBALIAS=Алиас
DBUSER=SYSDBA
DBPASS=Пароль

# Настройки почты
MAILFROM=...@yandex.ru
MAILTO=...@yandex.ru
SMTPSERVER=smtp.yandex.com
SMTPLOGIN=...@yandex.ru
SMTPPASS=Пароль

# Папки
BKPPATH=/var/firebird/backup
YADPATH=/mnt/yadisk/DB
LOGPATH=/var/log

# Имена файлов
BKPNAME=$DBALIAS-$(date +%Y%m%d-%H%M)
BKPFILE=$BKPNAME.fbk
ARCFILE=$BKPNAME.tar.gz
RSTFILE=$BKPFILE.fdb

# Файлы логов
LOGFILE=$LOGPATH/backup_"$DBALIAS"_last.log
LOGCOMM=$LOGPATH/backup_"$DBALIAS".log

# Количество сохраняемых бекапов
BACKUP_COUNT_LOC=5
BACKUP_COUNT_YAD=62

echo "" > $LOGFILE
echo "==[$(date '+%d.%m.%Y %H:%M')]====================" >> $LOGFILE
echo "" >> $LOGFILE

RES_ERR=0
cd $BKPPATH


# Бекап ---------------------------------------------------------------------------------------------------------------

echo "---- Бекап"
echo "---- Бекап" >> $LOGFILE
SECONDS=0
gbak -b -g -se localhost:service_mgr -USER $DBUSER -PAS $DBPASS $DBALIAS $BKPPATH/$BKPFILE &>> $LOGFILE

if [[ $? != 0 ]]
then
    RES_ERR=1
    echo "Ошибка при резервном копировании" >> $LOGFILE
else
    echo "Ок" >> $LOGFILE
fi
echo "Время выполнения: $SECONDS сек." >> $LOGFILE
echo "" >> $LOGFILE


# Тестовый рестор -----------------------------------------------------------------------------------------------------

if [[ $RES_ERR == 0 ]]
then
    echo "---- Тестовое восстановление"
    echo "---- Тестовое восстановление" >> $LOGFILE
    SECONDS=0
    gbak -c -rep -se localhost:service_mgr -USER $DBUSER -PAS $DBPASS $BKPPATH/$BKPFILE $BKPPATH/$RSTFILE &>> $LOGFILE

    if [[ $? != 0 ]]
    then
	RES_ERR=1
	echo "Ошибка при тестовом восстановлении" >> $LOGFILE
    else
	echo "Ок" >> $LOGFILE
    fi
    echo "Время выполнения: $SECONDS сек." >> $LOGFILE
    echo "" >> $LOGFILE
    rm $RSTFILE
fi


# Архивирование -------------------------------------------------------------------------------------------------------

if [[ $RES_ERR == 0 ]]
then
    echo "---- Архивирование"
    echo "---- Архивирование" >> $LOGFILE
    rm $ARCFILE
    SECONDS=0
    tar -cvzf $ARCFILE $BKPFILE &>> $LOGFILE

    if [[ $? != 0 ]]
    then
	RES_ERR=1
	echo "Ошибка при архивировании" >> $LOGFILE
    else
	echo "Ок" >> $LOGFILE
    fi
    echo "Время выполнения: $SECONDS сек." >> $LOGFILE
    echo "" >> $LOGFILE
    rm $BKPFILE

    # Удаление устаревших бекапов на локальном диске

    declare -i ARC_NUM=0
    LS="$(ls -r $DBALIAS*.tar.gz)"
    for ARC in $LS
    do
	ARC_NUM=$ARC_NUM+1
        if [[ $ARC_NUM -gt $BACKUP_COUNT_LOC ]]
	then
	    rm $ARC
        fi
    done
fi


# Сборка мусора -------------------------------------------------------------------------------------------------------

if [[ $RES_ERR == 0 ]]
then
    echo "---- Сборка мусора"
    echo "---- Сборка мусора" >> $LOGFILE
    SECONDS=0
    gfix -sweep $DBALIAS -USER $DBUSER -PA $DBPASS &>> $LOGFILE

    if [[ $? != 0 ]]
    then
	RES_ERR=1
	echo "Ошибка при сборке мусора" >> $LOGFILE
    else
	echo "Ок" >> $LOGFILE
    fi
    echo "Время выполнения: $SECONDS сек." >> $LOGFILE
    echo "" >> $LOGFILE
fi


# Копирование на яндекс-диск ------------------------------------------------------------------------------------------

if [[ $RES_ERR == 0 ]]
then
    echo "---- Копирование на Яндекс.Диск"
    echo "---- Копирование на Яндекс.Диск" >> $LOGFILE
    mount /mnt/yadisk &>> $LOGFILE
    SECONDS=0
    cp $ARCFILE $YADPATH &>> $LOGFILE

    if [[ $? != 0 ]]
    then
	RES_ERR=1
	echo "Ошибка при копировании на Яндекс.Диск" >> $LOGFILE
    else
	echo "Ок" >> $LOGFILE
    fi
    echo "Время выполнения: $SECONDS сек." >> $LOGFILE
    echo "" >> $LOGFILE

    # Удаление устаревших бекапов на Яндекс.Диске

    cd $YADPATH
    declare -i ARC_NUM=0
    LS="$(ls -r $DBALIAS*.tar.gz)"
    for ARC in $LS
    do
	ARC_NUM=$ARC_NUM+1
        if [[ $ARC_NUM -gt $BACKUP_COUNT_YAD ]]
	then
	    rm $ARC
        fi
    done

    umount /mnt/yadisk &>> $LOGFILE
fi


# Заполнение общего лога ----------------------------------------------------------------------------------------------

cat $LOGFILE >> $LOGCOMM


# Отправка лога на почту ----------------------------------------------------------------------------------------------

echo "---- Отправка лога на почту"
echo "---- Отправка лога на почту" >> $LOGCOMM

if [[ $RES_ERR == 0 ]]
then
    MAILSUBJ="Резервное копирование БД - Ок"
else
    MAILSUBJ="Резервное копирование БД - Ошибка"
fi
/usr/bin/sendEmail -f "$MAILFROM" -t "$MAILTO" -o message-charset=utf-8 -u "$MAILSUBJ" -o message-file=$LOGFILE -s $SMTPSERVER -o tls=yes -xu $SMTPLOGIN -xp $SMTPPASS &>> $LOGCOMM



Настройка доступа к яндекс-диску через webdav
На сервере выполняем:
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
apt-get install davfs2

Если надо изменить настройку, то:
dpkg-reconfigure davfs2

Создаем папку /mnt/yadisk

Редактируем "/etc/davfs2/secrets", добавляем строку:
/mnt/yadisk логин@yandex.ru пароль

Редактируем "/etc/fstab", добавляем строку:
https://webdav.yandex.ru /mnt/yadisk davfs user,rw,noauto 0 0

Проверяем монтирование:
mount /mnt/yadisk

Размонтируем:
umount /mnt/yadisk



Пример лога, который приходит на почту
Тема письма: "Резервное копирование БД - Ок"
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
==[18.02.2018 03:00]====================

---- Бекап
Ок
Время выполнения: 22 сек.

---- Тестовое восстановление
Ок
Время выполнения: 33 сек.

---- Архивирование
db-20180218-0300.fbk
Ок
Время выполнения: 19 сек.

---- Сборка мусора
Ок
Время выполнения: 2 сек.

---- Копирование на Яндекс.Диск
Ок
Время выполнения: 1 сек.


...
Рейтинг: 0 / 0
Бекап базы на Яндекс-диск
    #39603612
mars478
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Раньше были шутки про бэкапы для товарища майора, пришло время нового витка...

В чем смысл хранить срез "важной" бд на бесплатном и печальном облаке, которое к тому же при первой же возможности его сдаст тому кто попросит?

Хреновая реклама, яндекс.
...
Рейтинг: 0 / 0
Бекап базы на Яндекс-диск
    #39603617
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо.

Игорь Гурьянов> Так же буду признателен за дельные комментарии/советы от более опытных товарищей.

Игорь Гурьянов> a.. После бекапа выполняется тестовый рестор и сборка мусора>

А смысл делать и рестор, и сборку мусора?
База не останавливается, подменить нельзя?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Бекап базы на Яндекс-диск
    #39603618
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Гурьяновgbak -c -rep
прелестно, прелестно....
...
Рейтинг: 0 / 0
Бекап базы на Яндекс-диск
    #39603623
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В данном случае пофиг, это не файл БД.
...
Рейтинг: 0 / 0
Бекап базы на Яндекс-диск
    #39603630
Игорь Гурьянов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mars478Раньше были шутки про бэкапы для товарища майора, пришло время нового витка...

В чем смысл хранить срез "важной" бд на бесплатном и печальном облаке, которое к тому же при первой же возможности его сдаст тому кто попросит?

Хреновая реклама, яндекс.
С интересом изучу Ваш способ резервного копирования, недоступный товарищу майору, защищенный от тех, кто попросит, и при этом экономически целесообразный для мелкого бизнеса :)

А если по делу, то:
исключением из процесса одного только яндекс-диска сложностей для товарища майора особо не добавишь (вспоминаем СОРМ у всех провайдеров, законы Яровой и иже с ними);

от тех, кто попросит довольно надежно защитит шифрование архива архиватором;

далеко не для каждого бизнеса (мелкого) экономически целесообразно разворачивать собственный сервер для подобных задач;

не нравится печальный яндекс-диск - воспользуйтесь буржуйскими аналогами.
...
Рейтинг: 0 / 0
Бекап базы на Яндекс-диск
    #39603632
Игорь Гурьянов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамА смысл делать и рестор, и сборку мусора?
База не останавливается, подменить нельзя?
Да, база не останавливается.
...
Рейтинг: 0 / 0
Бекап базы на Яндекс-диск
    #39603634
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам,

в данном случае это шизофрения (я про одновременное указание -c -rep). Одна надежда, что в какой-нибудь версии Firebird разработчики все-таки научат gbak материться на одновременное указание параллельных опций.
И тогда мы узнаем, как много народу пострадает от того, что не умеют читать.

Кроме того, меня восхищает вот это
rm $RSTFILE

Уже сколько раз я говорил - если вы делаете тестовый рестор, то какого хрена вы результат рестора удаляете? ЕГО надо архивировать и сохранять, а не бэкап.
Да, ресторенная база побольше размером, чем бэкап. Но она уже готова к использованию, в отличие от бэкапа.
Либо не делайте тестовый рестор, либо не храните бэкап после рестора.
...
Рейтинг: 0 / 0
Бекап базы на Яндекс-диск
    #39603635
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv> Уже сколько раз я говорил - ... Либо не делайте тестовый рестор, либо не храните бэкап после рестора.

Мало ли что ты говорил. "Отресторенная" база ничего, кроме экономии
времени на рестор в случае факапа не даёт. А в этом случае небольшой
выигрыш по времени может быть непринципиален, будут проблемы поважнее.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Бекап базы на Яндекс-диск
    #39603640
mars478
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь ГурьяновС интересом изучу Ваш способ резервного копирования, недоступный товарищу майору, защищенный от тех, кто попросит, и при этом экономически целесообразный для мелкого бизнеса

Все что хранится в общедоступном интернете можно считать уже потенциально слитым, но ведь база заявлена "важная" - значит это недопустимо. А учитывая что она еще и "небольшая" - на внешний диск в 2тб влезть должна, с шифрованием вполне себе вариант. В случае неудачи другой носитель с хранящися на нем ключом успешно теряется - даже если диск пришлось отдать, пусть играют с ним пока всё не завершится за истечением срока давности.

Но да, если в серверную придут с постановлением - все что нужно люди получат, так что описанное выше касается только бэкапов и проявлений "досрочного" интереса к ним.
...
Рейтинг: 0 / 0
Бекап базы на Яндекс-диск
    #39603645
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам "Отресторенная" база ничего, кроме экономии
времени на рестор в случае факапа не даёт. А в этом случае небольшой
выигрыш по времени может быть непринципиален, будут проблемы поважнее.
отресторенная база это уже база, которую можно использовать, или как рид-онли, или как архивную, и т.д.

Понятно, что если у человека 62 бэкапа на яндекс-диске, то базы у него мелкие.
Однако, он в данный момент приобретает вредные привычки, которые, как правило, сохраняются.
А когда базы будут побольше, вот тогда эти вредные привычки уже будут выглядеть крайне странно.

Обычно бывает так - когда видишь вот такой бред в скриптах бэкапа и рестора, спрашиваешь - кто эту хню придумал?
В ответ - да кто ж его знает, так уже было написано до нас.
...
Рейтинг: 0 / 0
Бекап базы на Яндекс-диск
    #39603667
Игорь Гурьянов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvв данном случае это шизофрения (я про одновременное указание -c -rep). Одна надежда, что в какой-нибудь версии Firebird разработчики все-таки научат gbak материться на одновременное указание параллельных опций.
И тогда мы узнаем, как много народу пострадает от того, что не умеют читать.

Ну да, тут согласен. Перечитал документацию.

kdvЕГО надо архивировать и сохранять, а не бэкап.
Да, ресторенная база побольше размером, чем бэкап. Но она уже готова к использованию, в отличие от бэкапа.
Либо не делайте тестовый рестор, либо не храните бэкап после рестора.
Ну так это ваше сугубо личное мнение, зачем его всем навязывать в такой категоричной форме. Тестовый рестор я делаю не от большого желания, а из-за охрененной особенности фаерберда. В какой ещё СУБД бекап может безошибочно создаться, но при этом быть непригодным для восстановления базы? А насчет хранить файл базы вместо бекапа - вообще спорный вопрос. Что важнее: время восстановления или объем, занимаемый бекапом и перекачиваемый по каналам связи - целиком зависит от особенностей проекта. Где-то одно важнее, где-то другое.

P.S.
Хотя, подумав я частично с вами соглашусь )) Архивировать и удаленно хранить я всё равно буду бекап, но вот локально сохранить развернутую базу в некоторых случаях будет полезно.
...
Рейтинг: 0 / 0
Бекап базы на Яндекс-диск
    #39603672
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь ГурьяновТестовый рестор я делаю не от большого желания, а из-за охрененной особенности фаерберда. В какой ещё СУБД бекап может безошибочно создаться, но при этом быть непригодным для восстановления базы?В какой ещё СУБД есть бекап в виде экспорта данных в другом формате, а не в виде страничной копии ?
Что там с практической стороной вопроса ?
Какие претензии в Firebrid к бекапам в виде тех самых страничных копий ?
Может стоит изучить вопрос, перед тем как делать такие выводы ?
Ибо, судя по использованным ключам gbak, вопрос не изучался весьма неглубоко...
...
Рейтинг: 0 / 0
Бекап базы на Яндекс-диск
    #39603713
Игорь ГурьяновТак же буду признателен за дельные комментарии/советы1. nbackup -L
2. Сжать базу с помощью lzma с левелом 1
3. Положить архив на reverse EncFS, точка монтирования внутри папки яндекс-диска
4. nbackup -N
...
Рейтинг: 0 / 0
Бекап базы на Яндекс-диск
    #39603719
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot hvlad]В какой ещё СУБД есть бекап в виде экспорта данных в другом формате, а не в виде страничной копии ?
Что там с практической стороной вопроса ?[/hvlad]
в PG есть :-) И есть целая статья в их вики, почему бекап не дает 100% гарантии и может не восстановиться :-) Но виноват как всегда ФБ, ага.
...
Рейтинг: 0 / 0
Бекап базы на Яндекс-диск
    #39603733
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Гурьянов Что важнее: время восстановления или объем, занимаемый бекапом и перекачиваемый по каналам связи - целиком зависит от особенностей проекта. Где-то одно важнее, где-то другое.

пока у вас базы и бэкапы микроскопические, вам не важен ни объем, ни время перекачки по каналам, ни прочая ерунда.
Вот когда у вас рестор будет длиться хотя бы минут 15-20, тогда вы перестанете размышлять о том, что надо сохранять - бэкап или готовую базу.
...
Рейтинг: 0 / 0
Бекап базы на Яндекс-диск
    #39603802
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дельный комментаторИгорь ГурьяновТак же буду признателен за дельные комментарии/советы1. nbackup -L
2. Сжать базу с помощью lzma с левелом 1
3. Положить архив на reverse EncFS, точка монтирования внутри папки яндекс-диска
4. nbackup -N3 и 4 поменять местами
...
Рейтинг: 0 / 0
Бекап базы на Яндекс-диск
    #39603947
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvВот когда у вас рестор будет длиться хотя бы минут 15-20, тогда вы перестанете размышлять о том, что надо сохранять - бэкап или готовую базу.Если тестовое восстановление делается на отдельный сетевой ресурс - размышлять особо не придётся.
Если тестовое восстановление делается на локальный диск, придётся размышлять - что лучше: быстро восстанавливаться или хранить больше бэкапов.
Ну или размышлять об организации более сложной процедуры, т.к. "безальтернативному варианту" требуется место для рабочей базы, "гарантированно сохранённой базы" и текущей пары "файла бэкапа и тестового восстановления".
...
Рейтинг: 0 / 0
Бекап базы на Яндекс-диск
    #39604069
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по теме: КГ/АМ
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Бекап базы на Яндекс-диск
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]