Собственное решение по следам старой дискуссии.
#!/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
Комментариев нет:
Отправить комментарий
Примечание. Отправлять комментарии могут только участники этого блога.