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


Но встает вопрос и о резервирование самих сайтов. Да, безусловно, в веб панели 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`

создаем каталог, если его нет

test ! -d /var/backup/site/`date +%Y`/`date +%m` && { mkdir -p /var/backup/site/`date +%Y`/`date +%m` ; }
for ELEMENT in $LIST
do

Архивируем исключая мусор и бэкапы самих сайтов

tar -zcvpf /var/backup/site/`date +%Y`/`date +%m`/$ELEMENT-$DATE.tar.bz2 /var/www/$ELEMENT/web --exclude=backup --exclude=cgi-bin --exclude=clients --exclude=log --exclude=ssl --exclude=tmp --exclude=temp --exclude=stats --exclude=resize_cache >> /dev/nool 2>> /var/log/file_backup.err
done
exit 0

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

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 серверах, где места кот наплакал, а стоят они как кони, то вам остается дописать еще пару строк оставлять нужное количество бэкапов.


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