Задача поставлена следующим образом. На сервере располагается некоторое количество сайтов, работающих с БД (MySQL). Необходимо написать shell-скрипт, который будет ежедневно создавать архивы, содержащие все файлы из директорий этих сайтов, дамп базы данных, и ещё-какие-либо отдельные файлы (например, файл конфигурации Apache — httpd.conf). Также скрипт должен прочищать старые архивы (Например, старше 14 дней).
Перепост статьи Stratocaster`а. Спасибо автору!
Пусть все сайты располагаются в директории /var/www/linux_user/data/www, а имя базы данных — database_name.
Создаем файл backup.sh (я разместил его в /var/www/linux_user/) с содержимым:
# Создаем каталог для новой резервной копии mkdir /var/www/linux_user/data/backup/`date +%Y-%m-%d` # Копируем в него каталог с файлами сайтов cp -r /var/www/linux_user/data/www /var/www/linux_user/data/backup/`date +%Y-%m-%d` # Делаем backup базы данных # вместо [USER] и [PASSWORD] подставляем настоящие логин и пароль /usr/bin/mysqldump -u[USER] -p[PASSWORD] database_name > /var/www/linux_user/data/backup/`date +%Y-%m-%d`/`date +%Y-%m-%d`-base_backup.sql # Добавляем какой-нибудь файл (Например, httpd.conf) cp /etc/httpd/conf/httpd.conf /var/www/linux_user/data/backup/`date +%Y-%m-%d` # Добавим ещё и сам backup.sh (для примера) cp /var/www/linux_user/backup.sh /var/www/linux_user/data/backup/`date +%Y-%m-%d` # Затем архивируем весь каталог zip -r /var/www/linux_user/data/backup/`date +%Y-%m-%d`-backup.zip /var/www/linux_user/data/backup/`date +%Y-%m-%d` # И удаляем его (архив мы уже имеем, каталог нам не нужен) rm -rf /var/www/linux_user/data/backup/`date +%Y-%m-%d` # Также удаляем старые архивы find /var/www/linux_user/data/backup -name "*.zip" -mtime +14 -delete
Чтобы shell-скрипт запускался ежедневно в определенное время, добавим его на исполнение в список задач для Cron:
crontab -e
Вставляем запись:
00 03 * * * /bin/sh /var/www/linux_user/backup.sh >/dev/null 2>&1
Эта запись означает, что ежедневно в 03.00 по времени сервера будет запускаться скрипт backup.sh. Можно поменять время суток, выбрав такое, когда нагрузка на сервер минимальна.
На этом всё. В другой статье опишу процесс отправки резервных копий на удаленный FTP-сервер (также с помощью Cron и shell).