Автоматический бекап с веб-сервера

Писать скрипт будем на баше.

Шаг 1. Генерация списка директорий на бэкапы

В большинстве случаев, сайты располагаются в следущих директориях:

Как видно, уровень папки у каждого из вариантов разный, поэтому необходимо создать скрипт, который будет работать независимо от уровня папок.

Эта часть скрипта важна, так как при обслуживании серверов скрипт должен работать при любых параметрах системы!!!

ls -d /var/www/* > /ls.txt
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.

DIRS=$LINE
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)

### Dump backup using FTP ###
#Start FTP backup using ncftp
ncftp -u"$FTPU" -p"$FTPP" $FTPS< cd $FTPD
lcd $BACKUP
mput *
quit
EOF

Шаг 4. Как только все бэкапы закидаются, надо удалить сделанные архивы:

### Find out if ftp backup failed or not ###
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. После того, как вы настроили скрипт, необходимо его добавить в крон

#crontab -e
добавить строчку
@weekly /root/web-backup.sh
сохранить и выйти из редактора

Готово. Теперь у вас каждую неделю будут приходить свежие бэкапы сайтов и баз данных. При желании, можно настроить расписание крона на ежедневный бэкап.

  • Share to FaceBook
  • Save it!
  • Favorite this blog
Если вы не являетесь нашим клиентом, вы можете связаться с нами, используя контакты, или оставить заявку.

тел.: +7 (812) 904-76-65

ИТ-агентство «Си Лаб» © 2024 SEA-LAB LLC