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

Введение

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

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

Более подробно с описанием сервиса вы можете ознакомиться перейдя в раздел техподдержки Яндекса.
Support 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.

Хотите сказать денежное спасибо? Подарите денежку!

  • Alexey Ryabtsev

    How can i make full backup all database?

    • http://vk.com/id63130413 Алексей Долотов

      In the script indicated one database. Add on the analogy of base all that is necessary.

  • https://plus.google.com/+АринаЗабавкина Арина Забавкина

    Что-то не срабатывает все это дело на финише
    [root@sm ~]# sudo /root/backup/backup-day.sh
    /usr/bin/tar: /home/bitrix/ext_wwwr: Cannot open: No such file or directory
    /usr/bin/tar: Error is not recoverable: exiting now
    mysqldump: [Warning] Using a password on the command line interface can be insecure.
    — Connecting to localhost…
    : No such file or directory line 18: /mnt/ydisk.sm/sm/day
    tar (child): /mnt/ydisk.sm/sm/dayr/www_2018-04-20_10-42r.tar.gz: Cannot open: No such file or directory
    tar (child): Error is not recoverable: exiting now

    • http://vk.com/id63130413 Алексей Долотов

      /usr/bin/tar: /home/bitrix/ext_wwwr: Cannot open: No such file or directory — проверяйте наличие папок и правильность пути
      /usr/bin/tar: Error is not recoverable: exiting now — или tar не установлен или путь другой. Это путь верен точно для CentOS
      : No such file or directory line 18: /mnt/ydisk.sm/sm/day — проверяйте правильность

      • https://plus.google.com/+АринаЗабавкина Арина Забавкина

        пути 100% верные (это базовые пути во всех BitrixVM) и tar в нужном месте (у меня CentOS 7)
        а вот почему скрипт не видит файлов и папок вопрос
        что-то похоже с правами, но проверяю вызовом из под root

        • http://vk.com/id63130413 Алексей Долотов

          можно весь код сюда? (пароли запикайте)

          • https://plus.google.com/+АринаЗабавкина Арина Забавкина

            #!/bin/sh
            # Дата в формате 2015-09-29_04-10
            date_time=`date +»%Y-%m-%d_%H-%M»`
            # Путь сохранения копии
            bk_dir=’/mnt/ydisk.sms/sms.ru/day’
            # Исходник для копии
            inf_dir=’/home/bitrix/’
            # Название директории для копирования
            dir_to_bk=’ext_www’
            # Пользователь базы данных
            user=’usersms’
            # Пароль пользователя базы данных
            password=’6kt*********aV’
            # Имя базы для бэкапа
            bd_name=’dbsms’
            # Монтируем Yandex.Disk
            mount -t davfs https://webdav.yandex.ru /mnt/ydisk.sms/
            # Создание архива файлов папки 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.sms