- Главная... 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


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

  Коментарии (10)
RSS комментарии
 1 Написал(а) KekS, в 15:10 21.10.2014
Чтоб скрипт заработал и не было ошибки(dir=/root/backup: Command not found. ) нужно удалить 
# ----------------------------------- 
# Created Ohalnikov Oleg 
# Support: http://unixa.ru 
# ----------------------------------- 
Скрипт должен начинаться с #!/bin/sh
 2 Написал(а) олег, в 11:50 01.02.2013
а как сделать что бы подключться к ftp и с него скопировать файлы на локальный комп ???
 3 Написал(а) H@wk!, в 14:57 30.10.2012
частями делайте, например: ./test  
-- 
# ls -la test 
-rwxr--r-- 1 root wheel 58 30 окт 14:54 test 
# less test 
#!/bin/sh 
dir=/mnt/backup 
ls $dir 
--- 
# ./test 
site 
.... 
.... 
--- 
какой интерпретатор используете, может в этом дело?
 4 Написал(а) Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script , в 17:39 23.10.2012
Пытаюсь запустить скрипт (./backup) приведенный в статье, выдает следующие ошибки: 
zilla# ./backup 
dir=/root/backup: Command not found. 
data=20121023: Command not found. 
dir: Undefined variable. 
Немогу понять в чем может быть проблема, разрешение на файл выставил такие: 
-rwxr-xr-x 1 root wheel 
Помогите чем можете плз 
Заранее спасибо, статья понравилась просто доходчиво, но скрипт гад не пашет :(
 5 Написал(а) Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script , в 11:16 27.07.2012
Ваш скрипт поставил, работает. Вообщем это то что я сочинял, а тут увидел более простое аше решение. 
Спасибо!
 6 Написал(а) Сергей, в 09:22 25.06.2012
Спасибо огромное за аннотацию по бекапу :) Очень помогает. 
 
 
С признательностью и уважением, 
Сергей.
 7 Написал(а) Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script , в 20:10 22.04.2011
:)
 8 Написал(а) H@wk!, в 10:19 21.03.2011
Если речь идет о локальной сети, т.е. с одного сервера тянем на другой в пределах локалки, то такой способ вполне допустим. Если работа через Интернет, то я бы порекомендовал более безопасную передачу данных.  
Хотя и так и так, я бы использовал ssh, авторизация с помощью ключей. А дальше копируем любым способом.
 9 Написал(а) Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script , в 21:41 19.03.2011
Так же хочу дополнить "Скачать директорию которая есть на ФТП". 
Для того чтобы "скрытно" бекапить ваш бекап. 
Т.е если вас ломанули и всё удалили, то вы прекрасно знаете, что у вас еще есть бекапы и они не узнают где они хранятся... 
wget 'ftp://LOGIN: Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script /*'
 10 Написал(а) Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script , в 13:20 19.03.2011
Спасибо за ваш гайд, очень помог в настройки "психо бэкапэ" :).
 
« Crontab в будни и в выходные. Добавление правила в IPNAT по расписанию.   cdrecord - запись дисков »

#COMMENT

Блокируем Ylmf-pc на Exim, Bru...
Благодарю за кучу уцелевших нервов:) постоянно приходилось б...
30/05/17 00:02 More...
By Mus

Установка даты и времени в кон...
Спасибо
12/05/17 17:49 More...
By dushka

Раскладка в rdesktop
Огромное спасибо!
28/04/17 14:01 More...
By Виктор

Аутентификация средствами Apac...
подскажите как писать пороль цифры ?пж! :sigh
28/03/17 13:06 More...
By Лиза

Logwatch - мониторинг журналов...
Отлично, очень не хватало. Автору большое спасибо, пиши еще.
25/01/17 02:44 More...
By Gregg

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