вторник, 9 октября 2012 г.

Резервное копирование файлов и БД на Linux-сервере с помощью Cron

Это тоже 'Резервное копирование'Задача поставлена следующим образом. На сервере располагается некоторое количество сайтов, работающих с БД (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).

Читать далее и комментировать.