- Главная... arrow - Статьи... arrow Простой скрипт бэкапа ( на примере FreeBSD)

#Записки о Unix/Linux/BSD/Solaris

Простой скрипт бэкапа ( на примере FreeBSD)
Автор Охальников Олег   
24:12:2010 г.
Резервирование поделю на два вида - это повышение надежности с помощью RAID массивов и избыточное резервирование. Отмечу, что оба подхода должны применяться на ВАЖНЫХ серверах (в лучшем случае - на любых серверах). RAID, например 1 - зеркало, спасет от отказа одного из HDD, если файл сервер с большим количество HDD, то желательнее применять или RAID 10 или RAID 6 (за подробностями в википедию). Т.е. за короткий срок извлекаем поврежденный HDD, вставляем новый синхронизируем и продолжаем работать, наличие HotSwap корзин в данном случае очень желательно. От чего не спасет RAID, так это от человеческого фактора. Например взяли и удалили файл, спохватились, а его уже нет или повредили данные и т.д. Для этого необходима система избыточного резервирования важной информации, на сервере в основном это конфигурационные файлы, базы данных MySQL. В итоге имеем, как минимум 3 HDD, из двух собираем RAID1 (зеркало) и ОТДЕЛЬНЫЙ HDD - под бэкапы важных файлов. Конечно, это не обязательно, это лишь моя точка зрения, моё мнение.
Сам скрипт бэкапа backup.sh не сложный, выглядит следующим образом:


# -----------------------------------
# Created Ohalnikov Oleg
# Support: http://unixa.ru
# -----------------------------------

#!/bin/sh

DIR=/mnt/backup
DATA=`date '+%Y%m%d'`

cd $DIR
mysqldump -u root --password='*****' -l --all-databases | gzip > databases-$DATA.sql.gz
tar -czf named-$DATA.tar.gz /var/named
tar -czf log-$DATA.tar.gz /var/log
tar -czf etc-$DATA.tar.gz /etc
tar -czf locetc-$DATA.tar.gz /usr/local/etc
tar -czf www-$DATA.tar.gz /usr/local/www

for file in *-$DATA.*
do
echo "$file" >> $DIR/current
done
    echo "Backup Server $DATA" | mail -s "Backup Server $DATA" Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script < $DIR/current
rm -f $DIR/current

find $DIR/* -mtime +7 -exec rm {} \;

# <<< THE-END >>>

Все длинные команды mysqldump и mail должны быть написаны в одну строку.
DIR - директория с бэкапами.
DATA - текущая дата в формате ГОДМЕСЯЦДЕНЬ.
Далее по скрипту переходим в директорию с бэкапами (cd $DIR) и выполняем последовательно команды архивирующии все базы данных mysqldump ключ  --all-databass , -l - лочит базы на время выполнения дампа, ключ --password='*****' - вместо звездочек указываем пароль, т.к. он в открытом виде, права на файл backup.sh делаем 700, т.е. чтение, редактирование и исполнение - только root пользователю. Далее сжимаем полученный дамп gzip (должен присутствовать в системе) и перенаправляем в файл databases-$DATA.sql.gz. Далее идут команды tar -czf, которыми создаем архивы нужных директорий (можете включать любые свои). На этом собственно сам скрипт, который выполняет бекапы заканчивается, следующая секция для удобства или точнее для контроля выполнения архивирования. Т.е. после удачно выполненного скрипта, смотрим появились ли в директории файлы в имени которого числится текущая дата, если такие файлы есть - записываем их в файл current, который считываем в тело письма и отправляем на мыло администратору, далее удаляем временный файл current, т.е. вот эта секция:


do
echo "$file" >> $DIR/current
done
    echo "Backup Server $DATA" | mail -s "Backup Server $DATA" Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script < $DIR/current
  rm -f $DIR/current

Ну и последняя команда:

find $DIR/* -mtime +7 -exec rm {} \;

т.е. храним файлы архивов в /mnt/backup - 7 дней.

Чтобы бекап выполнялся каждый день в 00:05, добавляем задание в кронтаб #crontab -e:

# Backup
5 0 * * * /root/script/backup.sh

ВНИМАНИЕ! #crontab -e - это файл заданий root пользователя. Часто можно видеть темы, в которых говорится примерно следующее: "Добавляю команды в кронтаб, а они не выполняются" или "Добавляю скрипт в кронтаб, а он не выполняется, хотя из консоли ./backup.sh выполняется нормально". Все дело в том, что надо в #crontab -e прописать переменные окружения, т.е. добавить следующие строки в самый верх файла:

SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin
MAILTO= Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script

После чего команды в скриптах могут быть написаны в сокращенном виде. Если этих строк нет, то команды надо писать полностью, например не mysqldump ...... , а /usr/local/bin/mysqldump, что не совсем удобно. Я в кронтаб добавляю строку MAILTO=, т.е. все ошибки при исполнении скрипта по крону, падают мне на мыло.


На этом все.
Материал подготовил
Охальников Олег aka H@wk!  

Добавить коментарий
Имя:
E-mail
Коментарий:



Код:* Code


Просмотров: 6033

  Коментарии (4)
RSS комментарии
 1 Написал(а) Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script , в 20:10 22.04.2011
:)
 2 Написал(а) H@wk!, в 10:19 21.03.2011
Если речь идет о локальной сети, т.е. с одного сервера тянем на другой в пределах локалки, то такой способ вполне допустим. Если работа через Интернет, то я бы порекомендовал более безопасную передачу данных.  
Хотя и так и так, я бы использовал ssh, авторизация с помощью ключей. А дальше копируем любым способом.
 3 Написал(а) Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script , в 21:41 19.03.2011
Так же хочу дополнить "Скачать директорию которая есть на ФТП". 
Для того чтобы "скрытно" бекапить ваш бекап. 
Т.е если вас ломанули и всё удалили, то вы прекрасно знаете, что у вас еще есть бекапы и они не узнают где они хранятся... 
wget 'ftp://LOGIN: Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script /*'
 4 Написал(а) Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script , в 13:20 19.03.2011
Спасибо за ваш гайд, очень помог в настройки "психо бэкапэ" :).
 
« Crontab в будни и в выходные. Добавление правила в IPNAT по расписанию.   cdrecord - запись дисков »

#COMMENT

Linux - производитель сетевой ...
Посмотрите # dmesg | grep eth0 скорее всего карточка гигаби...
14/05/12 08:48 More...
By H@wk!

Linux - производитель сетевой ...
А что конкретно является скоростью, size или capacity. У мен...
11/05/12 23:19 More...
By qweqwerty

Arch rankmirrors или делаем mi...
Можно команды в sh скрипт засунуть и выполнять кроном, но я ...
10/05/12 11:13 More...
By H@wk!

Arch rankmirrors или делаем mi...
не всегда все держится в голове, поэтому - спасибо за потрач...
10/05/12 10:47 More...
By x5

FreeBSD оптимизация сервера. В...
Отличный блог, побольше бы таких статей)
07/05/12 09:28 More...
By Артем

Сейчас на сайте находятся:
21 гостей

Нашли ошибку!

Выделите текст и нажмите:
[Shift]+[Enter]
[Отправить]
Спасибо!