Резервное копирование всех сайтов с консоли
У многих веб студий встает вопрос о создание архивных копий всех сайтов. О резервном копировании баз данных мы говорили чуть раньше. Протестировав скрипт, я в нем дописал только проверку на существование каталогов перед их созданием. Все остальное меня устраивало.
Но встает вопрос и о резервирование самих сайтов. Да, безусловно, в веб панели Ispconfig3 стоящей на моих хостингах есть много приятных плюсов и такая возможность в том числе. Но и тут сказывается отсутствие гибкости.
- Резервное копирование можно осуществить только в 1 интервале (месяц) (неделя) или (год);
- Только 1 условие на 1 сайт;
- Нет самого старого дампа (на случай если спохватились через год, как ни странно такое бывает);
- Архив zip, а мне нужны tar.bz2 на это есть ряд причин.
И так, походив по просторам интернета в поиске хорошего скрипта, увы не нашел оного, они были или избыточны или же не отвечающие моим требованиям. В результате пришлось писать все самому собственный скрипт.
Основная задача:
- Делать резервные копии всех папок в отдельные файлы;
- При добавление новых сайтов скрипт должен подхватывать и их;
- Иметь всегда старый бэкап;
- Сжимать все файлы самым сильным архиватором;
- tail -18;
- Не брать мусора;
- Максимально простой скрипт к пониманию;
- Сбой в любом месте скрипта не должен его остановить;
- Легировать все ошибки;
Перед использованием скрипта конечно же стоит напомнить что тестировался он на следующей конфигурации системы:
- ОС 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 раз уменьшился ни спроста, да большинство контента слабо сжимается. Но мы исключили все архивы
Оставить комментарий