Автоматический бекап с веб-сервера
Писать скрипт будем на баше.
Шаг 1. Генерация списка директорий на бэкапы
В большинстве случаев, сайты располагаются в следущих директориях:
- /home/user/www
- /var/www/vhosts
- /usr/www/
- /www
Как видно, уровень папки у каждого из вариантов разный, поэтому необходимо создать скрипт, который будет работать независимо от уровня папок.
Эта часть скрипта важна, так как при обслуживании серверов скрипт должен работать при любых параметрах системы!!!
while read LINE
do
NUMBER=$((`echo $LINE|sed 's/[^/]//g'|wc -m`-1))
CUT=`echo $LINE | sed 's/_//' | sed 's/-//' | sed 's/\.//'`
let "NUMBER+=1"
CUT2=`echo $CUT | cut -d'/' -f$NUMBER`
echo $CUT2
Создаём список папок в файл /ls.txt
Далее считаем уровень вложенности относительно /
Далее для каждой папки создаётся имя, удобное для дальнейшего архивирования (например, sea-lab.ru преобразуется в sealabru)
Шаг 2.
BACKUP=/tmp/backup.$$
NOW=$(date +"%d-%m-%Y")
### MySQL Setup ###
MUSER="root"
MPASS="пароль от пользователя MySQL"
MHOST="localhost"
MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"
GZIP="$(which gzip)"
### FTP server Setup ###
FTPD="/backup"
FTPU="имя фтп пользователя"
FTPP="пароль фтп пользователя"
FTPS="адрес фтп сервера, на который будут скидываться бэкапы"
NCFTP="$(which ncftpput)"
### Other stuff ###
EMAILID="adminmail@domain.ltd"
### Start Backup for file system ###
[ ! -d $BACKUP ] && mkdir -p $BACKUP || :
### See if we want to make a full backup ###
FILE="sealab-fs-full-$NOW.$CUT2.tar.gz"
tar -zcvf $BACKUP/$FILE $DIRS
done < /ls.txt
### Start MySQL Backup ###
# Get all databases name
DBS="$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse 'show databases')"
for db in $DBS
do
FILE=$BACKUP/mysql-$db.$NOW.gz
$MYSQLDUMP -u $MUSER -h $MHOST -p$MPASS $db | $GZIP -9 > $FILE
done
Здесь мы задаём архивирование сайтов,автоматический бэкап всех баз данных на сервере MySQL на localhost, указывает реквизиты для входа на фтп-сервер хранения бэкапов и почту адиминистратора, на которую придет лог процесса бэкапа
Шаг 3. Теперь осталось закидать все файлы на фтп.
Сделаем это с помощью утилиты ncftp
Если она не стоит, то поставим её (yum install ncftp, apt-get install ncftp)
#Start FTP backup using ncftp
ncftp -u"$FTPU" -p"$FTPP" $FTPS<
lcd $BACKUP
mput *
quit
EOF
Шаг 4. Как только все бэкапы закидаются, надо удалить сделанные архивы:
if [ "$?" == "0" ]; then
rm -f $BACKUP/*
else
T=/tmp/backup.fail
echo "Date: $(date)">$T
echo "Hostname: $(hostname)" >>$T
echo "Backup failed" >>$T
mail -s "BACKUP FAILED" "$EMAILID" <$T
rm -f $T
fi
И заодно отправить отчет о прошедшем бэкапе на почту адиминистратору
Всё, бэкап сделан!
Скачать скрипт можно тут
Если Вы хотите с нами сотрудничать, то отправьте запрос через форму обратной связи.
Шаг 5. После того, как вы настроили скрипт, необходимо его добавить в крон
добавить строчку
@weekly /root/web-backup.sh
сохранить и выйти из редактора
Готово. Теперь у вас каждую неделю будут приходить свежие бэкапы сайтов и баз данных. При желании, можно настроить расписание крона на ежедневный бэкап.