Сисадмины делятся на тех, кто не делает бэкапы и тех кто уже делает. © народная мудрость
Все знают, что бэкапы это очень важно, но многим лень этим заниматься ровно до тех пор пока потеря данных не коснется его лично. Это может быть упавшая база в крупной организации или небольшая базка вашего сайта, а может быть вирусы, испортившие все ваши скрипты. Суть остается одна – придется долго и не факт, что успешно восстанавливать все утерянное. Зачастую восстановить все не удается или это требует денег и немалых.
В этой статье я расскажу про то, как организовать простую систему бэкапа для вашего сайта.
Первое, что нужно сделать при планировании мероприятий по бэкапу (резервному копированию) – это определиться с тем, что и как часто сохранять. Потом – куда . И потом – как восстанавливать.
Условно любой сайт можно разделить на 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
Никит, спасибо за информацию, правда, все эти скрипты для меня темный лес 🙁
Объясни чайнику, что нужно скачивать: у меня есть домашний каталог, есть база данных MySQL. Еще в самой админке WP есть возможность скачать файл экспорта. Что мне нужно скачать для бэкапа?
Достатоно базы и каталога с вордпрессом. Если как описано в этой статье, то утебя база MySQL, весь каталог вордпресса кроме uoloads и папка с фотками uploads.
Если без скриптов – то экспорт mySQL + архив директории сайта.