Резервное копирование всех сайтов с консоли


Но встает вопрос и о резервирование самих сайтов. Да, безусловно, в веб панели Ispconfig3 стоящей на моих хостингах есть много приятных плюсов и такая возможность в том числе. Но и тут сказывается отсутствие гибкости.

  1. Резервное копирование можно осуществить только в 1 интервале (месяц) (неделя) или (год);
  2. Только 1 условие на 1 сайт;
  3. Нет самого старого дампа (на случай если спохватились через год, как ни странно такое бывает);
  4. Архив zip, а мне нужны tar.bz2 на это есть ряд причин.

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

Основная задача:

  1. Делать резервные копии всех папок в отдельные файлы;
  2. При добавление новых сайтов скрипт должен подхватывать и их;
  3. Иметь всегда старый бэкап;
  4. Сжимать все файлы самым сильным архиватором;
  5. tail -18;
  6. Не брать мусора;
  7. Максимально простой скрипт к пониманию;
  8. Сбой в любом месте скрипта не должен его остановить;
  9. Легировать все ошибки;

Перед использованием скрипта конечно же стоит напомнить что тестировался он на следующей конфигурации системы:

  • ОС Debian 6
  • Веб панель Ispcinfig3
  • 185 web сайта.
  • 470 Гб суммарно файлов. В среднем от 5 до 150 тысяч файлов в каждом сайте.

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

touch /bin/filebackup
chmod 700 /bin/filebackup
vim /bin/filebakup
вставляем скрипт:
#!/bin/sh
cd /var/www/
DATE=`date +"%Y-%m-%d"`
LIST=`ls`

Создаем каталог, если его нет, архивируем и заливаем на внешний сервер ( требует установки wput, он поддерживает ограничение скорости)

#!/bin/sh
FTPUSER="*******"                     # Логин FTP сервера
FTPPASS="****************"            # Пароль FTP
FTPHOST="**************************"  # сервер FTP
FTPDIR="/server1.ru/site/"             # папка на FTP
SITEDIR="/var/www"                    # Папка где лежат сайты
TMPDIR="/var/backup/site"             # Где будут храниться временные файлы
DATE=`date +"%Y-%m-%d"`               # Формат даты в имени файла
cd $SITEDIR                           # Нужно чтбы  сделать ls
LIST=`ls | grep -E ".*\.\w{1,5}"`     # создаем список сайтов



cd $TMPDIR
test ! -d $TMPDIR/`date +%Y`/`date +%m` && { mkdir -p $TMPDIR/`date +%Y`/`date +%m` ; }
for ELEMENT in $LIST
    do
        echo "Архивируется сайт $ELEMENT"
        tar -zcvpf $TMPDIR/`date +%Y`/`date +%m`/$ELEMENT-$DATE.tar.gz $SITEDIR/$ELEMENT/web --exclude=backup --exclude=managed_cache --exclude=stats --exclude=resize_cache >> /dev/nool 2> /var/log/file_backup.err

        wput --limit-rate=60000K --timestamping `date +%Y`/`date +%m`/$ELEMENT-$DATE.tar.gz ftp://$FTPUSER:$FTPPASS@$FTPHOST$FTPDIR
       rm $TMPDIR/`date +%Y`/`date +%m`/$ELEMENT-$DATE.tar.gz && echo "Удален файл $TMPDIR/`date +%Y`/`date +%m`/$ELEMENT-$DATE.tar.gz"
  done


find $TMPDIR/ -type f -mtime +750 | xargs rm -f; #удаляет предыдущие бэкапы стaарше 2 лет.
find $TMPDIR/ -type d -empty | xargs rm -r;
rm -r $TMPDIR/`date +%Y`

Далее добавляем в крон:

crontab -e

Вставляем бэкап каждое первое число месяца в 5 утра (поскольку у меня в 4 запускается)

00 5 1 * * nice -18 filebackup >/dev/null 2 >> /var/log/ispconfig/cron.log

Все что нам требуется, это правильно прописать все в кроне и после этого оно само собой оживет.

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

Теперь о результатах. На выходе я получил бэкап 45Гб и все это чудо мы делали на протяжение 1.5 часов с tail -18 что очень даже ничего. Размер же файла в 10 раз уменьшился ни спроста, да большинство контента слабо сжимается. Но мы исключили все архивы 1С-БИТРИКС, архивы самой веб панели, исключили часть кешей и логов, тем самым облегчили бэкап не уменьшая его качество. Все, что нам остается это раз в год или больше заходить и удалять пару архивов, если нас начинает прижимать место. В моем случае это делается при заливке этих файлов на отдельный ftp сервер. Ну, а если вы все еще хоститесь на русских vps серверах, где места кот наплакал, а стоят они как кони, то вам остается дописать еще пару строк оставлять нужное количество бэкапов.

Оставить комментарий