Итак,имеем сервер с сайтом и базой данных, которые надо регулярно бекапить.
Мое решение выглядит следующим образом:
1)создаем скрипт backup который и будет делать бекап
#!/bin/sh

#создаем переменную в которой будет текущая дата
DATE=`/bin/date '+%d.%m.%Y'`
#на всякий случай очищаем каталог от предидущих бекапов
rm -f -R /tmp/backup/
#копируем содержимое веб-сервера во временную папку
cp -R /var/www /tmp/backup/
#экспортируем туда же базу данных
mysqldump --user=имя_пользователя --password="пароль" --database имя_базы > /tmp/backup/имя_базы.sql
#запаковываем все в Зип архив
zip -rqy9 /var/backup$DATE.zip /tmp/backup/

Теперь мы имеем сопию содержимого папки /var/www и дамп базы данных в архиве,который лежит в папке /var/.
Примечание:
1)не обязательно копировать содержимое веб-папки во временное место. Можно просто сразу его архивировать.
2)если в команду дампа базы MySQL добавить параметр --add-drop-tables то при восстановлении баз даных из бекапа, сначала сотрутся старые, а затем уже будут залиты новые из бекапа)

Но хранить бекапы на одном и том же диске глупо. Что же дальше? Дальше мы зальем этот бекап на другой сервер по протоколу FTP. Для этого мы используем скрипт на языке Perl.
Создадим файл например ftp.pl с содержимым:
use Net::FTP;
$ftp = Net::FTP->new("имя_сервера", Debug => 0)
or die "Cannot connect to some.host.name: $@";

$ftp->login("логин",'пароль')
or die "Cannot login ", $ftp->message;

$ftp->put("/var/$ARGV[0]")
or die "put failed ", $ftp->message;
и добавим в наш скрипт backup в конце строчку вызова скрипта закачки на FTP,находящийся в папке /usr/, и передачу ему имени файла(имя файла должно передаваться каждый раз,потому что оно меняется от даты бекапа)

perl /usr/ftp.pl backup$DATE.zip

Теперь, создав архив с копией всего необходимого, действие передается скрипту на Perl который и загружает на другой сервер ваш бекап. Вот так все просто)

<!--more-->

Добавить комментарий

%d такие блоггеры, как: