Как сделать резервную копию сайта

Как сделать резервную копию сайта. Готовое решение.

резервная копия сайтаВсе админы делятся на тех, кто не делает резервные копии и те, кто уже делает. С тех пор как я однажды потерял рабочие версии всех документов из-за краха флешки, я стал относиться ко второй группе. Но делаю резервные копии, только домашних файлов (об этом как-нибудь в другой раз). И вот наконец-то дошли руки до резервной копии сайта. Подкатом описание моей системы копирования данных с хостинга.


Итак, для создания копии у нас есть два варианта: воспользоваться тем, что дает хостер и сделать что-то свое. Часто хостинг компании предоставляют панель управления, из которой можно загрузить текущие резервные копии. Но у некоторых это делать крайне неудобно. Так на джино для создания копии придется потратить минут 10-15. Но есть компании, которые вообще не предоставляют каких-либо возможностей для загрузки резервки. К таким, в частности, относится всеми известный мастерхост (копии у них есть, но доступны они только админам хостинга). Поэтому сегодня я расскажу, как организован процесс резервного копирования моих сайтов на мастерхосте. По аналогии можно сделать резервки с любого другого хостинга.

Итак, для работы нам понадобиться: SSH (без него вообще никак), cron (можно обойтись, но никакой автоматизации), любая качалка файлов и прямые руки с трезвой головой.

Простая копия сайта

Для полноценной копии нам надо сделать резервку mysql базы и всех файлов сервера. Для начала сделаем все это ручками в SSH. Для коннекта я использую putty, но вы можете использовать любой другой клиент.

Резервная копия базы делается простой командой

mysqldump -u (userName) -p(userPassword) -h (baseHost) --all-databases > all-databases.sql

Где вместо (userName) подставляем логин доступа к базе, вместо (userPassword) пароль доступа к базе, а вместо (baseHost) хост (как правило, localhost). Обратите внимание, что между -p и (userPassword) нет пробела, а между -u и (userName) есть. Это важно!

Эта команда создаст резервную копию всех баз данных, доступных данному mysql пользователю в файл all-databases.sql. Если ваши базы разнесены по пользователям, то придется сделать копии для каждого пользователя. Только не забудьте разнести копии по разным файлам. Я делаю копию прямо в домашнюю директорию /home/u1111/, что бы потом можно было засунуть ее в резервную копию всех файлов.

Для создания резервной копии файлов используем следующую команду

tar -zcvf (fileName) (dirName)

Где вместо (fileName) подставляем название файла (у меня тут стоит home.tar.gz), а вместо (dirName) директорию, где у вас лежат все сайты (у мастерхоста это /home/u1111/ или $HOME)

Файл с резервкой будет создан в том каталоге, где вы сейчас находитесь. Для создания в другом каталоге, просто пропишите вместо (fileName) полный путь до файла.

Если вы все сделали правильно и при этом сложили резервную копию базы в корень сайта, то в файле (fileName) вы получите полную копию, включая базу данных. Затем сливаем ее по ФТП и храним в укромном месте до часах Х.

Автоматизируем резервное копирование

Но мне этого было мало. Хочется что бы резервное копирование было чуток быстрее и автоматом. Для этого будем использовать крон и простой скрипт.

Для этого создаем файл rcopy.sh и прописываем в него все строчки для резервного копирования базы и файлов (см. их выше). С одним условием, резервное копирование файлов настраиваем в любую директорию доступную из вне. Делается это для того, что бы потом можно было вытянуть архив с помощью качалки напрямую, минуя ФТП (хотя современные качалки умею качать и с ФТП).

Далее этот файл просто скармливаем крону в виде строки:

sh rcopy.sh

Настраиваем резервное копирование на каждую ночь с воскресенья на понедельник (можно и чаще, но имхо незачем). А в качалке настраиваем расписание выкачивания этого файла (или качаем каждый понедельник вручную). Вуаля, все готово. Теперь у вас всегда под рукойрезервная копия недельной давности. Если хостингов несколько, то и резервок будет несколько. Главное разнести эти копии по разным файлам.

P.S. Возможно есть более оптимальный способ резервного копирования и я его не знаю. Поделитесь?