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

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

 

Итак, для создания копии у нас есть два варианта: воспользоваться тем, что дает хостер и сделать что-то свое. Часто хостинг компании предоставляют панель управления, из которой можно загрузить текущие резервные копии. Но у некоторых это делать крайне неудобно. Так на джино для создания копии придется потратить минут 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. Возможно есть более оптимальный способ резервного копирования и я его не знаю. Поделитесь?

Реклама

7 комментариев

  1. Для бэкапа MySQL баз использую Sypex Dumper, – в нём вообще кнопочку нажал – и получил дампы хоть в tar.gz, хоть zip.

  2. Я тоже его использую, но для других целей (когда надо перетащить сайт с хоста на хост). Штука удобная, у меня даже есть правленный вариант, который сам все делает (не надо вводить логин-пасс и выбирать БД). Но через mysqldump получаетя гораздо быстрее.

  3. xlife:

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

    П.С, просто счас, думаю как организовать автобекап,

  4. В SSH таких ограничений как правило не бывает. С кроном сложнее. Обычно дают 30 секундный лимит на выполнение пхп скриптов, но если скрипт запускает из под крона, то на некоторых хостингах он отрабатывает без применения лимита (например, на том же мастехосте). Т.е. тут уже надо думать, экспериментировать.

  5. xlife:

    у меня стоит задача организовать на хосте nic.ru – joomla~250мгб +бд,
    пробовал подружится с компонентами резервирования для джумлы, однако терпения на них не хватило,))
    П.С. Кирилл можно личный вопрос! почему статьи новые не пишите, интересный блог ведь и писать умеете -популярно доходчиво.

  6. Незнаю можно ли на nic.ru запускать sh в кроне. Попробуй. Потом расскажешь.
    Новые статьи не пишу, потому что банально нет времени. Слишком много уходит на работу и новые эксперименты.

  7. Замечательная статья, я сам чуть не лишился сайта совсем недавно, хорошо что была копия!
    У меня на сайте можно посмотреть видео как делать бэкап на WordPress, если конечно автор данного сайта позволит, разместить данный хост.
    http://minihanov.ru/saytostroenie/kak-sdelat-rezervnuyu-kopiyu-sayta

Добавить комментарий