Shell/Bash: Создаем Backup-архив
Программистам и администраторам довольно часто приходится создавать backup'ы нужных, и порой трудно восстановимых скриптов и данных. Существует множество решений для этого. Вот моё решение, простое и лаконичное.
Главная задача backup - это сохранить нужные каталоги и не сохранять горы временных файлов и логов, так как благодаря им архивный файл раздувается до необъятных размеров. Ну и конечно еще хотелось бы, что б в имени файла с архивом присутствовала дата, когда этот файл был создан.
Для архивации я применю архиватор tar, у которого есть одна интересная опция:
--exclude-tag=ФАЙЛ -- исключать каталоги, содержащие ФАЙЛ, за исключением самого ФАЙЛА
благодаря этой опции надо всего лишь раскидать некий файл, например пустой скрытый .noarchive, во все каталоги, содержимое которых не надо бэкапить, а именно: временные директории, каталоги с логами и т.д.
А для получения даты, которая сохранится в имени архива, я использую метод date , с опцией: '+%d.%m.%Y'. В итоге текущая дата будет выведена в формате dd.mm.yyyy
И вот такой получится скрипт:
Осталось только в crontab настроить ежедневный запуск скрипта и вам больше не надо будет беспокоиться о вовремя не сделанном резервном хранении.
Главная задача backup - это сохранить нужные каталоги и не сохранять горы временных файлов и логов, так как благодаря им архивный файл раздувается до необъятных размеров. Ну и конечно еще хотелось бы, что б в имени файла с архивом присутствовала дата, когда этот файл был создан.
Для архивации я применю архиватор tar, у которого есть одна интересная опция:
--exclude-tag=ФАЙЛ -- исключать каталоги, содержащие ФАЙЛ, за исключением самого ФАЙЛА
благодаря этой опции надо всего лишь раскидать некий файл, например пустой скрытый .noarchive, во все каталоги, содержимое которых не надо бэкапить, а именно: временные директории, каталоги с логами и т.д.
А для получения даты, которая сохранится в имени архива, я использую метод date , с опцией: '+%d.%m.%Y'. В итоге текущая дата будет выведена в формате dd.mm.yyyy
И вот такой получится скрипт:
#!/bin/bash # заносим в переменную DATE текущую дату DATE=`/bin/date '+%d.%m.%Y'` # переходим в каталог, в котором находятся рабочие скрипты cd /home/virtual/ # сохраняем дамп mysql /usr/bin/mysqldump -u USER -p PASSWORD BD_NAME > ./db.sql # архивируем все каталоги, кроме тех, в которых находится файл .noarchive /bin/tar -zcf PATH-TO-DIR-BACKUP/$DATE.backup.tar.gz --exclude-tag=.noarchive ./ # удаляем архивы, которым уже больше семи дней /usr/bin/find PATH-TO-DIR-BACKUP/ -type f -atime +7 -exec rm -f \{\} \; >/dev/null 2>&1
Осталось только в crontab настроить ежедневный запуск скрипта и вам больше не надо будет беспокоиться о вовремя не сделанном резервном хранении.
Похожие материалы:
Комментарии:
14 Декабря 2009 (18:20:44)
Andrey
(гость)
• ответить
Это хорошо и правильно . Но надо же знать основы бакапа - всемирно известные программки mysqlbackup, fsbackup и пр.
известные программки - это хорошо.
но что делать, если вы хоститесь на стороннем хостинге, на котором нет такой программки и у вас нет root-доступа, что бы её установить? пару месяцев переписываться с support'ом хостера?
К тому же почти все программы такого рода изобилуют кучей настроек с regexp'ами и прочей мистической мишурой, порою очень не понятной начинающему программисту или админу
А в моем скрипте достаточно знать основы - tar, rm, date... да и то не особо нужно, так как я подробно изложил что куда и как Надеюсь, что даже ребенок разберется
но что делать, если вы хоститесь на стороннем хостинге, на котором нет такой программки и у вас нет root-доступа, что бы её установить? пару месяцев переписываться с support'ом хостера?
К тому же почти все программы такого рода изобилуют кучей настроек с regexp'ами и прочей мистической мишурой, порою очень не понятной начинающему программисту или админу
А в моем скрипте достаточно знать основы - tar, rm, date... да и то не особо нужно, так как я подробно изложил что куда и как Надеюсь, что даже ребенок разберется