Собственное решение по следам старой дискуссии.
#!/bin/sh
# бэкап баз
destdir=/work/backup
mountdir=/mnt/fb_bases_backup
backup_date=`date +%Y%m%d`
for_days=7
GBAK=/opt/firebird/bin/gbak
echo ""
echo "================================================================================"
echo "Резервирование рабочих баз данных..."
date
echo ""
for database in "db_alias_1" "db_alias_2"
do
echo "Создание резервной копии базы $database..."
destfilename=$destdir/$database.$backup_date.fbk
logfilename=$destdir/$database.backup$backup_date.log
if [ -e $destfilename ]
then
echo " удаление резервной копии, сделанной ранее..."
rm -f $destfilename
fi
if [ -e $logfilename ]
then
echo " удаление протокола создания резервной копии, сделанной ранее..."
rm -f $logfilename
fi
$GBAK -b -v -y $logfilename -t -user SYSDBA -password SYSDBApassword $database $destfilename
if [ -e $destfilename ]
then
if [ -e $destfilename.gz ]
then
echo " удаление архива резервной копии, сделанной ранее..."
rm -f $destfilename.gz
fi
echo " cжатие резервной копии..."
gzip $destfilename
if [ -e $destfilename.gz ]
then
echo "Резервная копия успешно создана!"
if [[ -d "$mountdir" && "$(ls -A $mountdir)" ]]
then
backupfilename=$mountdir/$database.$backup_date.fbk.gz
if [ -e $backupfilename ]
then
echo "Удаление из сетевого хранилища архива резервной копии, сделанной ранее..."
rm -f $backupfilename
fi
mv $destfilename.gz $backupfilename
if [ -e $backupfilename ]
then
echo "Резервная копия перенесена в сетевое хранилище!"
fi
fi
fi
else
echo "Ошибка при создании резервной копии!"
fi
echo ""
done
echo "Удаление устаревших резервных копий в локальном хранилище (созданные $for_days дней назад)..."
find $destdir -name '*.fbk.gz' -type f -mtime +$for_days -exec rm -f {} \;
if [[ -d "$mountdir" && "$(ls -A $mountdir)" ]]
then
echo "Удаление устаревших резервных копий в сетевом хранилище (созданные $for_days дней назад)..."
find $mountdir -name '*.fbk.gz' -type f -mtime +$for_days -exec rm -f {} \;
fi
echo "================================================================================"
Переменные:
- destdir - локальный каталог, куда первоначально будут сохраняться резервные копии;
- mountdir - смонтированный раздел, куда будут сохраняться резервные копии (фактически, на удаленный сервер);
- backup_date - дата создания резервной копии в формате "ГГГГММДД";
- for_days - количество дней, в течении которых будет храниться резервная копия;
- GBAK - путь к gbak.
Скрипт написан так, чтобы создавать резервные копии нескольких баз на сервере. В цикле выполняется обход псевдонимов этих баз, и для каждой указанной базы создается резервная копия.
Сначала копия сохраняется в локальный каталог. Если в течение текущего дня создавалась резервная копия, она будет заменена на новую. Полученная резервная копия сжимается в архив и, если имеется смонтированный раздел, переносится в этот раздел.
В конце из локального и удаленного хранилищ резервных копий удаляются копии баз старше указанного количество дней, чтобы, с одной стороны, сэкономить дисковое пространство, а с другой стороны, иметь про запас некоторый набор копий для восстановления.
Далее указываем cron'у запускать скрипт, например, раз в сутки в полночь:
#/etc/crontab 1 0 * * * root /home/username/fb_db_backup.sh
Комментариев нет:
Отправить комментарий
Примечание. Отправлять комментарии могут только участники этого блога.