Итак,имеем сервер с сайтом и базой данных, которые надо регулярно бекапить.
Мое решение выглядит следующим образом:
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—>