2016
14
Нояб

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

grigoriev
1008
Резервное копирование сайта

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

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

  • Копирование базы данных сайта
  • Копирование файлов сайта
  • Автоматизация резервного копирования сайта

Копирование базы данных сайта

Все самые распространённые cms используют для хранения своих данных бд. Самым распространённый у хостеров сервером баз данных является MySQL. Так что при написании кода будем ориентироваться на него. У MySQL есть очень интересная утилита - mysqldump. Эта утилита создаёт дамп заданой базы данных. Потом из этого дампа если что можно восстановить все таблицы бд. Синтаксис вызова утилиты mysqldump.

mysqldump -u[логин к бд] -p[пасворд к бд] [название копируемой бд] >
[название файла дампа].sql

Для хранения резервных копий я создал через файловый менеджер в корне каталога на хостинге папку backup. Туда мой скрипт делает копии. Потом я их по ftp переношу на свой компьютер. В notepad++ я создал файл mybackup.sh и перенёс его в корневой каталог на хостинг. Ниже я выложил листинг mybackup.sh, который делает дамб бд и переносит его в папку backup.

#получаем текущую дату                                    
BACKDATE=`date +%Y-%m-%d`;
#задаём имя копир. сайта
SITENAME='aweb34';
#создаём дамп бд и переносим его в backup
mysqldump -u[ваш логин к бд] -p[ваш пасс к бд] [название копир. бд] > backup/$SITENAME-$BACKDATE.sql;

Если вы хотите потестить работу скрипта в реальном времени, то код можно запустить в командной строке. Как подключится к удалённому серверу по ssh и начать работать в командной строке я писал здесь. Создавать дамп бд мы научились давайте теперь научимся создавать архив с файлами сайта.

Копирование файлов сайта

Для копирования и архивации я использую команду tar. Синтаксис.

tar [-ключи] [путь и название содаваемого архива].tar.gz
[путь к папке или файлу, который архивируем]

Обычно все файлы сайта хранятся в папке public_html, её и будем архивировать и переносить в папку backup. Допишем наш скрипт mybackup.sh.

#получаем текущую дату                                    
BACKDATE=`date +%Y-%m-%d`;
#задаём имя копир. сайта
SITENAME='aweb34';
#создаём дамп бд и переносим его в backup
mysqldump -u[ваш логин к бд] -p[ваш пасс к бд] [название копир. бд] > backup/$SITENAME-$BACKDATE.sql;
#архивируем файлы сайта
tar cvfz backup/$SITENAME-$BACKDATE.tar.gz public_html;

Теперь осталось настроить запуск скрипта автоматически по заданному нами графику.

Автоматизация резервного копирования

Есть такой демон (программа работающая в фоновом режиме) в юникс системах, cron. Cron это планировщик задач. Он даёт возможность запускать скрипты по определённому графику. Файл в котором расписано время выполнение задач называется crontab. Небольшая справка по синтаксису crontab.

* любой, день, месяц, год, час, минута
*/2 При применении к полю минута обозначает каждые 2 минуты
день недели День недели считается с 0 - воскресенье и заканчивается 7 - суббота
месяц считается с 1 до 12
день считается с 1 до 31
час считается с 0 до 23
минута считается с 0 до 59
0,4 при применении к полю дни недели событие происходит в воскресенье и четверг

На разных хостингах управление кроном реализовано по разному. Я опишу работу с cron по отношению к timeweb.

подключение ssh

1 - в админ панели хостинга заходим в вкладку crontab. 2 - жмакаем "добавить новую задачу". В появившимся окне заполняем поля. Тут всё я думаю всё понятно. В поле "время выполнения" выставлены настройки при которых скрипт будет выполняться в воскресенье и четверг каждой недели каждого месяца каждого года в 3 часа ночи. 3 - можно оставить свой емайл и будем получать на него сообщения о выполнении скрипта. Вот таким вот способом можно настроить автоматическое резервное копирование сайта joomla wordpress и других cms.

Поделиться:

Комментарии

Виктор

Виктор

22.11.2016 05:17 Ответить

Очень полезная статья и напоминание, что нужно делать копии сайта.

Анатолий Комков

Анатолий Комков

04.12.2016 16:18 Ответить

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

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


Защитный код
Обновить