"Программист — это профессиональный конвертер галлюцинаций заказчика в жесткую формальную систему"
Apr 192013
 

Сисадмины делятся на тех, кто не делает бэкапы и тех кто уже делает. © народная мудрость

Все знают, что бэкапы это очень важно, но многим лень этим заниматься ровно до тех пор пока потеря данных не коснется его лично. Это может быть упавшая база в крупной организации или небольшая базка вашего сайта, а может быть вирусы, испортившие все ваши скрипты. Суть остается одна – придется долго и не факт, что успешно восстанавливать все утерянное. Зачастую восстановить все не удается или это требует денег и немалых.

В этой статье я расскажу про то, как организовать простую систему бэкапа для вашего сайта.

Первое, что нужно сделать при планировании мероприятий по бэкапу (резервному копированию) – это определиться с тем, что и как часто сохранять. Потом – куда . И потом – как восстанавливать.

Условно любой сайт можно разделить на 3 части

  1. База данных
  2. Движек сайта
  3. Контент

Каждая из этих частей имеет свои размеры и свою частоту обновления, которая как раз и влияет на расписание и тип архивирования.

Планирование расписания бэкапа

Чем чаще – тем лучше, но и переусердствовать не стоит. Поэтому бэкап будет запускаться раз в сутки, но по разному для каждой из частей сайта.

Самая динамичная часть сайта – это как правило, база данных. Ее я предлагаю бэкапить раз в сутки.

Движок сайта – меняется довольно редко, но и объем там не сильно большой. Полный бэкап стоит делать раз в неделю.

Контент – часть его лежит в базе данных, но часть скорее всего будет на файловой системе – фотографии, файлы, да что угодно. Это самая объемная часть и при активной жизни сайта она тоже активно меняется. Ее полный бэкап раз в месяц.

Типы бэкапа

Полный – это случай, когда все данные копируются в архив как они есть.

Инкрементальный – копируются только изменения, произошедшие с прошлого бэкапа

Помните про то, что бэкап мы запускаем каждый день? Сейчас разберемся как.

Для базы – всегда полный бэкап, путем импорта все базы сайта. Это не большие объемы данных.

Для движка – раз в неделю полный бэкап и каждый день инкрементальный.

Для контента – полный бэкап раз в месяц и инкрементальный каждый день.

При такой схеме в самом худшем случае будет утеря всего один день работы сайта.

Физическая организация бэкапа

Полный бэкап базы данных

Если у вас сайт на Joomla, WordPress и Drupal, то скорее всего базой будет MySQL, на его примере и рассмотрим.

mysqldump -pPASSWD -uLOGIN DB_NAME > DB_NAME.sql
gzip DB_NAME.sql

После этого мы получим архив с базой в текущей директории

Теперь перейдем к архивированию движка сайта. Тут все несколько сложнее, т.к. придется организовать 2 вида бэкапа.

Полный бэкап движка

Тут есть как варианты использовать find+tar+gz+scp и завернуть все это в скрипт, либо поставить утилиту duplicity, что избавит нас от написания скриптов. Эта утилита, на мой взгляд, самая адекватная на данный момент.

Архивируем движок

duplicity --exclude /var/www/fff/data/www/autozov.ru/img /var/www/fff/data/www/autozov.ru/ file:///var/www/nord_tramper/back_up/

Первый раз будет сделан полный бэкап. В следующий уже инкрементальный

Т.к. все запускается скриптом, то надо избежать запроса на passphrase и, допустим, пароля к SFTP

#!/bin/sh export  FTP_PASSWORD=ftppasswd export PASSPHRASE=passphrase duplicity –full-if-older-than 1W --exclude CONTENT_DIR SITE_FOLDER ftp://user@server/backup_source_cat
 unset FTP_PASSWORD
 unset PASSPHRASE
 exit 0

Теперь тоже самое, но для контента

#!/bin/sh
 export  FTP_PASSWORD=ftppasswd
 export PASSPHRASE=passphrase
 duplicity –full-if-older-than 1M CONTENT_FOLDER ftp://user@server/backup_content_cat
 duplicity remove-older-than 1M –force ftp://user@server/backup_content_cat
 unset FTP_PASSWORD
 unset PASSPHRASE
 exit 0

В принципе все это объединяется в один скрипт

#!/bin/sh
 export  FTP_PASSWORD=ftppasswd
 export PASSPHRASE=passphrase
 mysqldump -pPASSWD -uLOGIN DB_NAME > DB_NAME.sql
 gzip DB_NAME.sql
 SFTP for SQL
 duplicity –full-if-older-than 1W --exclude CONTENT_DIR SITE_FOLDER ftp://user@server/backup_source_cat
 duplicity remove-older-than 1M –force ftp://user@server/backup_source_cat
 duplicity –full-if-older-than 1M CONTENT_FOLDER ftp://user@server/backup_content_cat
 duplicity remove-older-than 1M –force ftp://user@server/backup_content_cat
 unset FTP_PASSWORD
 unset PASSPHRASE
 exit 0

Который отдается на выполнение Cron раз в сутки – часа на 2-3 ночи (ну или когда у вас минимальная нагрузка на сервер)

0 3 * * * /backup_script.sh >> /var/log/back_up.log

Для простого восстановления данных

duplicity ftp://user@server/back_content_up DESTINATION_FOLDER

Или на момент 7 дней назад

Duplicity –t 7D ftp://user@server/back_content_up DESTINATION_FOLDER

 

 

 

 

 

Поделиться в соц.сетях

 Posted by at 1:37 pm

  2 Responses to “Настйрока резеровного копирования (бэкапа) для сайта”

  1. Никит, спасибо за информацию, правда, все эти скрипты для меня темный лес 🙁
    Объясни чайнику, что нужно скачивать: у меня есть домашний каталог, есть база данных MySQL. Еще в самой админке WP есть возможность скачать файл экспорта. Что мне нужно скачать для бэкапа?

    • Достатоно базы и каталога с вордпрессом. Если как описано в этой статье, то утебя база MySQL, весь каталог вордпресса кроме uoloads и папка с фотками uploads.
      Если без скриптов – то экспорт mySQL + архив директории сайта.

Leave a Reply to admin Cancel reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)