Вы здесь

Бэкап сайтов на удаленный ftp сервер - пример скрипта


Бэкап сайтов на удаленный ftp сервер - пример скрипта

Привет, опять сегодня у нас пример скрипта для бэкапа. Сегодняшний скрипт очень похож на показанный мной ранее. Там мы копиравали файлы на сервер бэкапов, непосредсвенно с этого самого сервера бэкапов, при помощи ftp клиента, подключаясь к хостинговому серверу, тем самым необходимо было использовать 2 скрипта - 1 на хостинге, и 1 на сервере бэкапов. Сегодня же я хочу показать вам подобный скрипт, но в отличии от упомянутого выше, мы будем слать файлы на сервер бэкапов, используя ftp, с хостингового сервера. Т.е. в данном случае ftp сервер у нас - это сервер бэкапов. Так же в этом скрипте реализована простенькая ротация бэкапов.

Для работы скрита в вашей домашней папке должны быть созданы папки tmp и backup, на удаленном ftp сервере должна быть папка backup_test.

И так сам текст скрипта:

#!/bin/bash
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
#задаем домашнюю папку пользгвателя, узнать ее можно подключившись к хостингу по ssh и набрав команду pwd
HOME=/home/sanglyb
#задаем имя бэкапу
FILE=site_ru_$(date +"%Y-%m-%d_%H:%M").tgz
#старый бэкап, который будет удален с сервера. Подразумевается, что ротация - 30 дневная, значит и старый бэкап будет в имени иметь дату меньше на 30 дней от сегодняшней
OLDFILE=site_ru_$(date -d 'now -30 days' +"%Y-%m-%d")*
# $HOME/web - папка с файлами сайта, если у вас будет отличаться - измените ее
tar czf $HOME/tmp/files.tgz $HOME/web
# подключение к mysql - тут не забудьте ввести ваш хост, пользователя и пароль, а так же измените название базы данных
mysqldump -h 127.0.0.1 -u sanglyb_sanglyb -ppassw0rd sanglyb_test > $HOME/tmp/mysql.sql
tar czf $HOME/backup/$FILE $HOME/tmp/*
cd $HOME/backup
rm -rf $HOME/tmp/*
#параметры подключения к ftp серверу
HOST='mytechnote.ru'
USER='[email protected]'
PASSWD='passw0rd'
#для подключения используется пассивный режим, если вам нужен активный - здесь и ниже при подключении к ftp уберите ключ -p
ftp -np $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
binary
cd backup_test
put $FILE
quit
END_SCRIPT
#получаем количество файлов в папке на ftp сервере
CONTENT="$(ftp -inp $HOST <<HERE
user $USER $PASSWD
cd backup_test
ls
bye
HERE
)"
NUMBER=`echo "$CONTENT" | egrep -v "user|ls|^d|bye" | wc -l`
NUMBER=$((NUMBER-1))
#если файлов больше 30ти, удалим старый файл
if [ $NUMBER -gt 30 ]
then
ftp -np $HOST <<END_SCRIPT1
quote USER $USER
quote PASS $PASSWD
binary
prompt
cd backup_test
mdelete $OLDFILE
quit
END_SCRIPT1
fi
#удаляем локальную копию бэкапа
rm -rf $HOME/backup/$FILE
exit 0

Вот такой вот скриптик. Просьба строго не судить за топорную ротацию. Да, я понимаю, что если по какой то причине будет пропущено создание бэкапа, то на сервере будет лежать лишний файл, но скрипт писался в попыхах и на коленке, и выложен просто в качестве примера.

Если кто то знает более хорошее решение для ротации файлов с использованием ftp просьба написать в комментариях или на форуме.

В остальном - в комментариях в скрипте всё в общем то написано. После его заливки на хостинг, можно добавить этот скрипт в крон, что бы бэкапы делались автоматически.

1 0

Поделитесь статьей с друзьями в соц. сетях, возможно, она будет им полезна.


Если вам помогла статья, вы можете >>отблагодарить автора<<