Резервное копирование web-сайта

backup

Я думаю, не стоит напоминать о том, насколько важно резервное копирование данных на сервере.

– Сисадмины бывают двух типов:
Первые – пока ещё не делают бэкапы…

Немного расскажу о том, как я подошел к решению этой проблемы на примере этого же сайта, litl-admin.ru.
Итак, по нашему плану, резервироваться нужно каждый день, поскольку статьи пишу “то густо, то пусто”, лучше предостеречься конечно.

backup
backup

Что будем резервировать?

Поскольку сайт у нас на стандартном движке, с использованием базы данных, то при резервном копировании нужно сохранять следующие пункты:

  • База данных (таблица с WordPress);
  • Структура файлов и папок;

Для резервирования напишем скриптик rezerv.day

#!/bin/bash
rsync -av "/path/to/litl_admin_site" "/root/backup/litl-admin.ru/"
mysqldump -u###1### -p###2#### ###3### > "/root/backup/litl-admin.ru/db.sql"
tar cvzf "/root/backup/D-litl-admin.ru-`date +%Y-%m-%d-%H-%M-%S`.tar.gz" "/root/backup/litl-admin.ru/"
find "/root/backup/" -mtime +10 -type f -name "*.gz" -delete

Я нарочно завуалировал некоторые параметры:
###1### – имя пользователя в Mysql, обладающего достаточными привилегиями;
###2### – пароль этого пользователя в Mysql;
###3### – имя базы, в которой хранятся данные сайта;

Что при этом происходит.

Первым делом, с помощью rsync (как пользоваться rsync) копируем файловую структуру сайта. В общем, сюда можно добавить так же ключ delete, чтобы удалялись файлы, которых не стало. Например, удалили картинки, или кэширование внутреннее. Нет нужды копить инкрементный бэкап, поэтому ключ можно добавить.
А лучше сделать другой файл, например rezerv.week и в нём чистить, а то мало ли! Как раз восстановить удаленный файл будет нужно.

Далее, сбрасываем дамп mysql базы данных в файл, в ту же папку. Все просто, потребуется только указать аутентификационные данные и файл-приёмник.

Ну и наконец, архивируем с помощью tar. Я добавляю в имя файла текущие элементы даты и времени, чтобы не запутаться, когда бэкапов будет много.

Напоследок, удаляем все архивы, возраст которых старше 10 дней. Если есть большой дисковый массив, конечно, можно хранить данные за месяц, и т.д. Но нет нужды.

Что можно добавить:

  • Копирование бэкапа на другой сервер, либо сразу в облако, тот же dropbox;
  • Резервирование конфигураций Апача, и других служб;
  • Отправку уведомлений администратору, когда бэкап создался;

Теперь, запускаем кронтаб:

# crontab -e

и дописываем строку:

0 1 * * * /путь/к/rezerv.day

Таким образом файл будет запускаться каждый раз, когда на часах будет 1:00, т.е. ежедневно в час ночи.
Будьте очень внимательны!

В частности запись:
* 1 * * * /путь/к/rezerv.day
Приведет к тому, что файл будет запускаться каждую минуту в промежутке от 1:00 до 1:59, если объем диска не велик, то очень скоро всё переполнится.

Интересно? Поделись с другом
Litl-Admin.ru

Comments:

Leave a Reply