Нояб
Резервное копирование сайта
Недавно озаботился вопросом резервного копирования своих сайтов. Не люблю использовать лишние плагины или компоненты для 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.
1 - в админ панели хостинга заходим в вкладку crontab. 2 - жмакаем "добавить новую задачу". В появившимся окне заполняем поля. Тут всё я думаю всё понятно. В поле "время выполнения" выставлены настройки при которых скрипт будет выполняться в воскресенье и четверг каждой недели каждого месяца каждого года в 3 часа ночи. 3 - можно оставить свой емайл и будем получать на него сообщения о выполнении скрипта. Вот таким вот способом можно настроить автоматическое резервное копирование сайта joomla wordpress и других cms.
Комментарии
Виктор
22.11.2016 05:17 Ответить
Очень полезная статья и напоминание, что нужно делать копии сайта.
Анатолий Комков
04.12.2016 16:18 Ответить
Очень интересно, возьму на заметку.
Спасибо.