Как сделать резервную копию сайта на яндекс диск

Как сделать резервную копию сайта на яндекс диск

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

Теоретический курс по основам сетевых технологий. Позволит системным администраторам упорядочить и восполнить пробелы в знаниях. Цена очень доступная, есть бесплатный доступ. Все подробности по . Можно пройти тест на знание сетей, бесплатно и без регистрации.

Двигаться будем поэтапно. Сначала просто рассмотрим вариант бэкапа непосредственно файлов сайта и базы данных. А затем загрузим его на Яндекс.Диск.

Автоматический бэкап сайта

Тут я не изобретал велосипеда, а воспользовался стандартным способом архивирования файлов — архиватором tar. Все комментарии и пояснения напишу сразу в скрипте:

#!/bin/bash
# Задаем переменные
# Текущая дата в формате 2020-12-01_04-10
date_time=`date +"%Y-%m-%d_%H-%M"`
# Куда размещаем backup
bk_dir='/mnt/yadisk/site1.ru'
# Директория на уровень выше той, где лежат файлы
inf_dir='/web/sites/site1.ru/'
# Название непосредственно директории с файлами
dir_to_bk='www'

# Создание архива
/usr/bin/tar -czvf $bk_dir/www_$date_time.tar.gz -C $inf_dir $dir_to_bk

На выходе после работы скрипта имеем папку с именем www_2020-12-01_04-10.tar.gz, внутри которой будет лежать папка www со всем содержимым. Изначально, эта папка располагалась по адресу /web/sites/site1.ru/www. Здесь я применил tar с параметром для того, чтобы в архиве не было точного пути /web/sites/site1.ru, а была только папка www. Мне просто так удобнее.

Можно пользоваться отдельно этим скриптом для создания архивов файлов, не обязательно сайта. Кладем его в cron и получаем регулярную архивацию.

Скрипт для бэкапа базы данных

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

#!/bin/sh
# Задаем переменные
# Текущая дата в формате 2020-12-01_04-10
date_time=`date +"%Y-%m-%d_%H-%M"`
# Куда размещаем backup
bk_dir='/mnt/yadisk/site1.ru'
# Пользователь базы данных
user='user1'
# Пароль пользователя
password='pass1'
# Имя базы для бэкапа
bd_name='bd1'

# Выгружаем базу
/usr/bin/mysqldump --opt -v --databases $bd_name -u$user -p$password | /usr/bin/gzip -c > $bk_dir/mysql_$date_time.sql.gz

На выходе имеем файл с дампом базы mysql_2020-12-01_04-10.sql.gz. Дамп хранится в текстовом формате, можно открывать и редактировать любым редактором. Если у вас несколько баз mysql и вы хотите их разом забекапить, автоматически разложив по отдельным файлам, читайте отдельную статью по теме — бэкап всех баз mysql в отдельные файлы.

Настройка яндекс диска в CentOS 8

Существует достаточно удобный и бесплатный сервис Яндекс.Диск, который может использовать любой желающий. Бесплатно дается не так много места, но для бэкапа сайта хватит. К слову, у меня с помощью всевозможных акций бесплатно доступно 368 ГБ:

Как сделать резервную копию сайта на яндекс диск

Яндекс.Диск раньше можно было подключать с помощью webdav, но в какой-то момент эта возможность была закрыта. Причем без анонса и уведомления. Теоретически, вы можете использовать webdav, но практически работать он не будет.

У меня в качестве сервера выступает CentOS 8, поэтому я расскажу как настроить консольный клиент linux для работы с яндекс диском в нем. Если у вас еще нет своего сервера, то читайте мои статьи по этому поводу — установка и настройка centos.

Для яндекс диска есть готовый rpm пакет, с помощью которого можно быстро установить клиента.

# rpm -ivh http://repo.yandex.ru/yandex-disk/yandex-disk-latest.x86_64.rpm

При такой установке, вам его обновлять придется вручную. Есть возможность подключить репозиторий, чтобы потом он обновлялся автоматически через dnf.

mcedit /etc/yum.repos.d/yandex.repo
[yandex]
name=Yandex
failovermethod=priority
baseurl=http://repo.yandex.ru/yandex-disk/rpm/stable/$basearch/
enabled=1
metadata_expire=1d
gpgcheck=1
gpgkey=http://repo.yandex.ru/yandex-disk/YANDEX-DISK-KEY.GPG
# rpm --import http://repo.yandex.ru/yandex-disk/YANDEX-DISK-KEY.GPG
# dnf install yandex-disk

Клиент диска установили, теперь его надо настроить. Это можно сделать с помощью консольной команды.

# yandex-disk setup

Запустится мастер настройки, комментировать которые особо нет смысла, там и так все понятно.

Теперь все файлы, положенные в директорию /mnt/yadisk будут синхронизированы с облаком и загружены в него. Файлы не обязательно класть физически, подойдут и символьные ссылки. Статус синхронизации можно посмотреть отдельной командой.

Я одно время синхронизировал очень большие каталоги, с десятками тысяч файлов. Работало вполне сносно, но когда счет пошел на сотни тысяч файлов, стало тяжко и перешел на s3. А так в целом Яндекс.Диск очень устраивал в первую очередь своей ценой.

Автоматический архив сайта по дням

По отдельности разобрали все элементы создания резервной копии сайта, теперь пришел черед собрать все это в одном месте. Я предлагаю следующую схему бэкапа сайта:

  • Папка day, где хранится 7 архивов сайта за последние 7 дней.
  • Папка week, где хранятся 4 бэкапа за последние 4 недели.
  • Папка month, где хранятся все резервные копии сайта за все время, эту папку я автоматически не очищаю.

С такой схемой мы всегда имеем под рукой 7 последних архивов, недельные архивы текущего месяца и архив за каждый месяц на всякий случай. Пару раз меня такая схема выручала, когда нужно было что-то достать из бэкапа недельной давности, к примеру.

Привожу 3 полных скрипта по созданию резервной копии сайта по схеме, предложенной выше.

Скрипт ежедневного бэкапа сайта backup-day.sh:

#!/bin/bash
# Задаем переменные
# Текущая дата в формате 2020-12-01_04-10
date_time=`date +"%Y-%m-%d_%H-%M"`
# Куда размещаем backup
bk_dir='/mnt/yadisk/site1.ru/day'
# Директория для архива
inf_dir='/web/sites/site1.ru/'
# Название непосредственно директории с файлами
dir_to_bk='www'
# Пользователь базы данных
user='user1'
# Пароль пользователя
password='pass1'
# Имя базы для бэкапа
bd_name='bd1'

# Создание архива исходников
/usr/bin/tar -czvf $bk_dir/www_$date_time.tar.gz -C $inf_dir $dir_to_bk
# Выгружаем базу данных
/usr/bin/mysqldump --opt -v --databases $bd_name -u$user -p$password | /usr/bin/gzip -c > $bk_dir/mysql_$date_time.sql.gz
# Удаляем архивы старше 7-ми дней
/usr/bin/find $bk_dir -type f -mtime +7 -exec rm {} ;

Скрипт еженедельного бэкапа сайта backup-week.sh:

#!/bin/bash
# Задаем переменные
# Текущая дата в формате 2020-12-01_04-10
date_time=`date +"%Y-%m-%d_%H-%M"`
# Куда размещаем backup
bk_dir='/mnt/yadisk/site1.ru/weeek'
# Директория для архива
inf_dir='/web/sites/site1.ru/'
# Название непосредственно директории с файлами
dir_to_bk='www'
# Пользователь базы данных
user='user1'
# Пароль пользователя
password='pass1'
# Имя базы для бэкапа
bd_name='bd1'

# Создание архива исходников
/usr/bin/tar -czvf $bk_dir/www_$date_time.tar.gz -C $inf_dir $dir_to_bk
# Выгружаем базу данных
/usr/bin/mysqldump --opt -v --databases $bd_name -u$user -p$password | /usr/bin/gzip -c > $bk_dir/mysql_$date_time.sql.gz
# Удаляем архивы старше 30-ти дней
/usr/bin/find $bk_dir -type f -mtime +30 -exec rm {} ;

Скрипт ежемесячного бэкапа сайта backup-month.sh:

#!/bin/bash
# Задаем переменные
# Текущая дата в формате 2020-12-01_04-10
date_time=`date +"%Y-%m-%d_%H-%M"`
# Куда размещаем backup
bk_dir='/mnt/yadisk/site1.ru/month'
# Директория для архива
inf_dir='/web/sites/site1.ru/'
# Название непосредственно директории с файлами
dir_to_bk='www'
# Пользователь базы данных
user='user1'
# Пароль пользователя
password='pass1'
# Имя базы для бэкапа
bd_name='bd1'

# Создание архива исходников
/usr/bin/tar -czvf $bk_dir/www_$date_time.tar.gz -C $inf_dir $dir_to_bk
# Выгружаем базу данных
/usr/bin/mysqldump --opt -v --databases $bd_name -u$user -p$password | /usr/bin/gzip -c > $bk_dir/mysql_$date_time.sql.gz


Не забудьте создать директорию /mnt/yadisk/site1.ru на яндекс диске, а в ней еще 3 папки: day, week, month: # cd /mnt/yadisk/site1.ru && mkdir day week month

Теперь для автоматизации добавляем эти 3 файла в cron:

# mcedit /etc/crontab

# site backup to yandex.disk
# ежедневно в 4:10
10 4 * * * root /root/bin/backup-day.sh >/dev/null 2>&1
# еженедельно в 4:20 в воскресенье
20 4 * * 0 root /root/bin/backup-week.sh >/dev/null 2>&1
# ежемесячно в 4:30 1-го числа месяца
30 4 1 * * root /root/bin/backup-month.sh >/dev/null 2>&1

Все, наш сайт надежно забэкаплен. По идее, сюда нужно прикрутить оповещение на почту, но у меня всё руки не доходят это сделать. Предпочитаю мониорить бэкапы с помощью zabbix.

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

Теперь рассмотрим вариант, когда вам необходимо восстановить сайт из резервной копии. Для этого нам понадобятся оба архива: исходники и база данных. Разархивировать в принципе можно где угодно. В windows архивы открываются бесплатным архиватором 7zip. Дамп базы данных в обычном текстовом формате, его можно открыть блокнотом, скопировать и вставить в phpmyadmin, если база небольшая.

Как сделать резервную копию сайта на яндекс диск

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

Вот пример того, как извлечь файлы из архива в консоли сервера. Разархивируем каталог www из бэкапа:

# tar -xzvf www_2020-12-01_04-10.tar.gz

Файлы извлечены в папку www. Теперь их можно скопировать в папку с сайтом.

Для восстановления базы данных поступаем следующим образом. Сначала распакуем архив:

# gunzip mysql_2020-12-01_04-10.sql.gz

Теперь зальем дамп в базу данных:

# mysql --host=localhost --user=user1 --password=pass1 bd1;

> source mysql_2020-12-01_04-10.sql;

Все, база данных восстановлена.


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

Заключение

Итак, мы рассмотрели варианты создания резервных копий сайта и базы данных на примере типового проекта. При этом использовали только стандартные средства сервера. В качестве примера мы использовали приемник для хранения копий Яндекс.Диск, но ничто не мешает адаптировать его под любой другой. Это может быть отдельный жесткий или внешний диск, другое облачное хранилище данных, которое можно подмонтировать к серверу.

Схема создания бэкапа позволяет откатиться практически на неограниченное время назад. Глубину архивов вы можете сами задавать, изменяя параметр mtime в скрипте. Можно хранить, к примеру, ежедневный архив не 7 дней, как делаю я, а 30, если у вас есть такая потребность. Так что пробуйте, адаптируйте под себя. Если есть какие-то замечания по работе, ошибки или предложения по улучшению функционала, делитесь своими мыслями в комментариях, буду рад их услышать.

Онлайн курсы по Mikrotik

Если у вас есть желание научиться работать с роутерами микротик и стать специалистом в этой области, рекомендую пройти курсы по программе, основанной на информации из официального курса MikroTik Certified Network Associate. Помимо официальной программы, в курсах будут лабораторные работы, в которых вы на практике сможете проверить и закрепить полученные знания. Все подробности на сайте .

Стоимость обучения весьма демократична, хорошая возможность получить новые знания в актуальной на сегодняшний день предметной области. Особенности курсов:

  • Знания, ориентированные на практику;
  • Реальные ситуации и задачи;
  • Лучшее из международных программ.

Помогла статья? Подписывайся на telegram канал автора

Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.
Источник

Просмотров:

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

Adblock
detector