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

Введение

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

Вариантов резервного копирование множество. Мне нравится использовать Crontab и делать резервные копии на Yandex.Disk, об этом я и напишу.

Более подробно с описанием сервиса Yandex Disk вы можете ознакомиться перейдя в раздел техподдержки Яндекса.

Выбор места для backup сайта

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

Сервис Yandex.Disk уже давно зарекомендовали себя с лучшей стороны, поэтому я ими и пользуюсь. Любая почта по умолчанию имеет 10 Гигабайт места, чего с головой хватает на резервирование одного среднестатистического сайта.

Backup и его периодичность

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

  • Дневные копии — хранить 30 дней,
  • Месячные копии — хранить год.

Подход к резервированию сугубо личное дело и зависит от множества факторов. Главное чтобы эти копии всегда были доступны, исправны и удовлетворяли вашим требованиям.

Davfs2 установка и настройка для WebDav

Yandex.Disk дает возможность подключится с помощью WebDav. Для CentOS 7 нам необходимо добавить пакет davfs2 для работы по WebDav.

Установка Davfs2

Подключим репозиторий Еpel:

yum -y install epel-release

Установим пакет davfs2:

yum -y install davfs2

Работа с WebDav для Yandex.Disk

Создадим папку куда будем монтировать:

mkdir /mnt/ydisk.support

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

Смонтируем Yandex.Disk в необходимую папку:

mount -t davfs https://webdav.yandex.ru /mnt/ydisk.support/
= вывод команды с необходимыми данными =
Please enter the username to authenticate with server
 https://webdav.yandex.ru or hit enter for none.
 Username: вводим логин
 Please enter the password to authenticate user zeroxzed@yandex.ru with server
 https://webdav.yandex.ru or hit enter for none.
 Password: вводим пароль
 /sbin/mount.davfs: Warning: can't write entry into mtab, but will mount the file system anyway

Диск смонтировался в папку /mnt/yadisk.support.

Отмантировать диск можно командой:

umount /mnt/ydisk.support/

Введение вручную данных при монтировании не всегда удобно и для удобства мы автоматизируем этот процесс.

Отредактируем файл /etc/davfs2/secrets, добавив в конец строку с данными для авторизации:

mcedit /etc/davfs2/secrets
= необходимые данные для добавления =
# путь монитрования - почтовый ящик - пароль
/mnt/ydisk.support/ support@sevo44.ru password

Так мы можем задать любое количество строчек с необходимыми ресурсами Yandex.Disk.

В случае если вы хотите чтобы диск монтировался при перезагрузке системы то в etc/fstab необходимо добавить строчку:

mcedit /etc/fstab
= необходимые данные для добавления =
https://webdav.yandex.ru /mnt/ydisk.support davfs rw,user,_netdev 0 0
# обязательно переход на новую строку

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

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

Создание необходимых папок

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

cd /mnt/ydisk.support && mkdir sevo44.ru 
cd /mnt/ydisk.support/sevo44.ru && mkdir day month

В итоге:

  • sevo44.ru — каталог где лежат все копии сайт,
  • day — дневные копии за 30 дней,
  • month — месячные копии за 1 год.

Скрипты для Crona

Создадим файл скрипта для ежедневного копирования:

mcedit /root/backup/sevo44.ru/day.sh
= необходимые данные =
#!/bin/sh
# Дата в формате 2015-09-29_04-10
date_time=`date +"%Y-%m-%d_%H-%M"`
# Путь сохранения копии
bk_dir='/mnt/ydisk.support/sevo44.ru/day'
# Исходник для копии
inf_dir='/web/sites/sevo44.ru/'
# Название директории для копирования
dir_to_bk='www'
# Пользователь базы данных
user='srg%5s^^^esf'
# Пароль пользователя базы данных
password='sgd!!2w43jfJJsfgj'
# Имя базы для бэкапа
bd_name='bdsevo44'

# Монтируем Yandex.Disk
mount -t davfs https://webdav.yandex.ru /mnt/ydisk.support/
# Создание архива файлов папки WWW
/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 {} \;
# Отключаем Yandex.Disk
umount /mnt/ydisk.support

По аналогии создадим файл скрипта для месячного резервного копирования:

mcedit /root/backup/sevo44.ru/month.sh
= необходимые данные =
#!/bin/sh
# Дата в формате 2015-09-29_04-10
date_time=`date +"%Y-%m-%d_%H-%M"`
# Путь сохранения копии
bk_dir='/mnt/ydisk.support/sevo44.ru/month'
# Исходник для копии
inf_dir='/web/sites/sevo44.ru/'
# Название директории для копирования
dir_to_bk='www'
# Пользователь базы данных
user='srg%5s^^^esf'
# Пароль пользователя базы данных
password='sgd!!2w43jfJJsfgj'
# Имя базы для бэкапа
bd_name='bdsevo44'

# Монтируем Yandex.Disk
mount -t davfs https://webdav.yandex.ru /mnt/ydisk.support/
# Создание архива файлов папки WWW
/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
# Удаляем копии старше 365-ми дней
/usr/bin/find $bk_dir -type f -mtime +365 -exec rm {} \;
# Отключаем Yandex.Disk
umount /mnt/ydisk.support

После создания скриптов дадим необходимые права для всех файлов в папке backup:

chmod +x -R /root/backup

Добавление параметров заданий в Crontab

Откроем для редактирования /etc/crontab файл откуда выполнятся задания:

mcedit /etc/crontab
= необходимые данные для добавления =
# sevo44.ru backup to ydisk.support
# Каждый день в 1:10 запускается ежедневный backup
10 1 * * * root /root/backup/sevo44.ru/day.sh >/dev/null 2>&1
# Первого числа каждого месяца в 1:20 запускается месячный backup
20 1 1 * 0 root /root/backup/sevo44.ru/month.sh >/dev/null 2>&1

Перезагрузим cron в системе CentOS 7 для применения изминений:

systemctl restart crond

Всё настроили.

Для проверки запустите в командной строке строчки из crontab (/root/backup/sevo44.ru/month.sh >/dev/null 2>&1) и увидите как отработает задание.

Проверка логов cron

Посмотреть результат работы cron можно заглянув в файл:

cat /var/log/cron
= вывод удачной работы задания =
Apr 18 01:10:01 ih378656 CROND[17528]: (root) CMD (/root/backup/sevo44.ru/day.sh >/dev/null 2>&1)

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Понравилась статья? Поделитесь ей с друзьями!

Похожие по теме записи

Пожалуйста, оставляйте свои комментарии

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

8 комментариев для статьи “Backup сайта на Яндекс Диск

  1. Хороший способ . Спасибо.
    По мне есть два недостатка. 1. Пароль от базы передаётся в открытом виде в консоль (например Percona ругается что нельзя так делать, хотя и не препятствует). 2. Добавить бы уведомление на почту по событию — успех или не успех при бэкапе.
    Доработать если — будет лучший способ!

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

    2. Алексей, намекните о каком инструменте пойдёт речь 🙂
      Ещё есть такой вопрос — про мониторинг — как считаете monit подойдёт для мониторинга основных узлов веб-сервера? Просто у него настройка скажем так очень дружелюбная. Но за простоту наверняка придётся чем то расплачиваться. Вы пробовали его в работе?
      Читаю ещё статьи вашего коллеги про zabbix — как то очень тяжёлый он для меня. Ещё читал на просторах инета про nagios — если приходилось сталкиваться, дайте пожалуйста отзыв, чисто ощущение от работы/надёжности и пр.

      1. Инструменты обычные rsync и ssh с сертификатом. Главное это подход который позволяет иметь железобетонные бэкапы защищены от любых видов взлома.
        О этот zabbix 🙂 я долго вникал в его нюансы. Сейчас мне кроме него в мониторинге ничего не надо. Дело в том что в сети куча статей про установку и какие то куски про настройку. Документация написана таким хорошим техническим языком что понять что к чему очень сложно. Давно хотел начать писать про zabbix, но не мог до конца разложить по полочкам в своей голове всю основу работы. Сейчас первая статья будет про установку, потом про то как система работает и что может с пояснением видов клиентов и тд. и тп. Подпишитесь и будете получите на почту сообщения о новых статьях. Никаких мусорных рассылок я не делаю.

        1. Подписался. И уже получил на днях первую статью про Zabbix 🙂
          А Duplicity Вы сейчас не используете в работе?

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *