Бэкап и восстановление сайта в Linux

Здравствуйте, уважаемые читатели. Сегодня статья на тему: "Бэкап и восстановление сайта в Linux". При наличии веб-сайта на сервере, резервное копирование, это одна из важнейших функций, которую необходимо настроить. Случится может всякое, а потерять «всё нажитое непосильным трудом», перспектива не очень приятная.
Резервное копирование сайта – это создание заархивированной копии файлов, и дампа базы данных сайта, в специально выделенной директории, на том же или удалённом сервере.
Восстановление сайта из резервной копии – это замена файлов, и содержимого базы данных сайта, на предварительно сохранённые копии. После процедуры восстановления, всё содержимое сайта, откатывается на момент создания резервной копии, из которой произведено восстановление.
Чтобы всё было наглядно, в качестве «жертвы» резервного копирования и восстановления, будем использовать веб-приложение OwnCloud, установку которого мы рассматривали в прошлой статье.
Создание Бэкапа файлов сайта
- Чтобы не было путаницы, можно создать инфраструктуру, в которую будет производится резервное копирование.
- Создаём директорию /rezerv, а в ней отдельные директории для резервных копий файлов сайта, и базы данных.
- Создаём директории site и baza.
# mkdir -p /rezerv/site
# mkdir -p /rezerv/baza
- Для создания бэкапа файлов сайта, мы будем использовать утилиту tar.
- Нам нужно создать архив файлов сайта, с понятным для нас названием, чтобы мы в итоге могли понять, что это за копия, и когда она создана.
Команда будет выглядеть так:
# tar -czvf /rezerv/site/backup-`date +"%Y-%m-%d_%H-%M"`.tar.gz -C /var/www/html/ owncloud
--- Будет создана заархивированная копия директории owncloud, находящейся в /var/www/html/.
--- Созданный архив будет расположен в директории /rezerv/site/.
--- Архив будет иметь название вида: backup-дата_время создания.tar.gz
- Отправляем команду в консоль, и проверяем результат.
- В директории /rezerv/site/ появился архив, с настроенным нами названием.

- Задача выполнена.
Создание Бэкапа базы данных сайта
- Теперь займёмся созданием резервной копии базы данных, по аналогии с резервной копией файлов сайта.
- Будем использовать утилиту mysqldump.
Команда будет выглядеть так:
# mysqldump -u oblako -p123 oblako | gzip -c > /rezerv/baza/mysql-`date +"%Y-%m-%d_%H-%M"`.sql.gz
--- Будет создан дамп базы данных oblako, от имени пользователя oblako, с паролем 123.
--- Дамп будет заархивирован и расположен в директории /rezerv/baza/.
--- Архив будет иметь название вида: mysql -дата и время создания. sql.gz
- Отправляем команду в консоль, и проверяем результат.

- В результате получаем архив с дампом базы данных, и задуманным нами названием.
- Как видите сделать бэкап сайта не так уж и сложно. Кроме того, не требуется каких-то дополнительных компонентов. Всё что нужно, уже есть в системе.
Настройка автоматического бэкапа сайта
- Мы рассмотрели создание бэкапа сайта в ручную, но есть способ автоматизировать этот процесс.
- Для организации автоматического бэкапа сайта, мы будем использовать системный планировщик заданий cron.
- Для добавления задания в cron на CentOS, нам нужно открыть файл /etc/crontab.
- В файле crontab, есть комментарии по правильной настройке выполнения заданий.

- Задание на выполнение ежедневного бэкапа файлов сайта в 2:30 ночи, с настройками использованными нами выше, будет выглядеть так:
#Бэкап сайта 30 2 * * * root /bin/tar -czf /rezerv/site/backup-`date +\%Y-\%m-\%d_\%H-\%M`.tar.gz -C /var/www/html/ owncloud
- А задание на выполнение ежедневного бэкапа базы данных, так же в 2:30 ночи, с настройками использованными нами выше , будет выглядеть так:
#Бэкап базы 30 2 * * * root /bin/mysqldump -u oblako -p123 oblako | /bin/gzip -c > /rezerv/baza/mysql-`date +\%Y-\%m-\%d_\%H-\%M`.sql.gz
- Добавляем оба задания в файл crontab, и сохраняем изменения.

Восстановление файлов сайта из бэкапа.
- Заходим в директорию с резервными копиями файлов сайта.
# cd /rezerv/site
- Просматриваем содержимое.
# ls
- Нас интересует точное название архива, из которого мы хотим произвести восстановление.
- Разархивируем нужный архив.
# tar -xzvf backup-2019-11-11_14-52.tar.gz
- В директории /rezerv/site, появится папка owncloud с файлами, которые и нужно восстановить.
- Следующая команда произведёт замену файлов в корневой директории сайта, файлами из разархивированного бэкапа.
# \cp -fR /rezerv/site/owncloud/* /var/www/html/owncloud
- Восстановление файлов сайта из бэкапа завершено.
Восстановление базы данных сайта из бэкапа.
- После восстановления файлов сайта, произведём восстановление базы данных из бэкапа.
- Заходим в директорию с резервными копиями базы данных.
# cd /rezerv/baza
- Так же как и в случае с бэкапом файлов, нас интересует точное название нужного нам архива.
# ls
- Разархивируем необходимый архив.
# gunzip mysql-2019-11-11_14-52.sql.gz
- Подключаемся к базе данных под необходимыми правами.
# mysql --host=localhost --user=oblako --password=123 oblako;
- Производим восстановление базы данных:
source /rezerv/baza/mysql-2019-11-11_14-52.sql
- И отключаемся от базы данных:
quit;
- Восстановление базы данных сайта из бэкапа завершено.
Сегодня мы рассмотрели тему: "Бэкап и восстановление сайта в Linux". Научились делать бэкапы, и производить восстановление. Смотрите также видео по теме.
Надеюсь статья была вам полезна. До встречи в новых статьях.
✍
С уважением, Андрей Бондаренко.
Видео на тему "Бэкап и восстановление сайта в Linux":

WMZ-кошелёк = Z667041230317
«Linux»
Добрый
А автоматическое удаление файлов по количеству файлов или по времени?
Таким образом либо ручками, либо все место забьется
Андрей Бондаренко
Можно добавить задания в крон:
/usr/bin/find /rezerv/site -type f -mtime +7 -exec rm {} \;
/usr/bin/find /rezerv/baza -type f -mtime +7 -exec rm {} \;
Но лучше создать скрипт для всего бэкапа в целом.
Alex
Что дописать в команду, чтобы создаваемый архив подписывался названием конкретного сайта, если их несколько? Спасибо.
Андрей Бондаренко
Добавить по команде для каждого отдельного сайта. Или создать скрипт со всеми командами, и добавить в крон задание на выполнение скрипта, а не команд.