Создаём резервные копии и перемещаем на Яндекс Диск

Admin Bash, CentOS, Linux, MySQL, VPS

Описание создания резервных копий файлов своего сайта на сервере CentOS (Linux). И дальнейшее перемещение этих backup файлов на Яндекс.Диск.

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

Если вам не нужно создание копий, а требуется только перемещение, читайте статью: «Как перемещать резервные копии сайта на Яндекс Диск».

Первым делом, на Linux сервер устанавливаем Яндекс.Диск, который будет работать по протоколу WebDav.

Только после установки диска приступаем к настройке копирования резервных данных.

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

На Яндекс.Диске создаём папки с названием сайта. Затем внутри этой папки создаём следующие папки: day, week, month.

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

Подключаемся к нашему серверу по протоколу SSH.

Создание папок через командную строку:

# Монтируем Яндекс Диск
mount -t davfs https://webdav.yandex.ru /mnt/yandex/
# Создаём папку с названием сайта
cd /mnt/yandex && sudo mkdir site_name.ru
# Создаём папку день, неделя, месяц
cd /mnt/yandex/site_name.ru && sudo mkdir day week month
# Отключаем Яндекс Диск
umount /mnt/yandex

Ежедневная резервная копия MySQL и одной папке

Теперь создаём папку на сервере, куда будем складывать все свои скрипты – my_scripts и первый файл скрипта backup_webdav_day.sh:

cd /
sudo mkdir my_scripts
nano /my_scripts/backup_webdav_day.sh

Скрипт будет сохранять ежедневные копии базы данных MySQL и также папку themes (шаблона сайта для WordPress). Я частенько совершенствую дизайн сайта и добавляю какие-нибудь новые элементы. И мне важно иметь копии этих данных на каждый день.

Можно папку themes поменять на любую другую. Например на папку загрузки изображений, в WordPress это папка – uploads. Если вы пишите статьи каждый день и загружаете картинки в каждую статью, то для вас может быть важным создание ежедневных резервных копий всех скриншотов на сайте.

Записываем в файл backup_webdav_day.sh следующее:

#!/bin/sh
# Текущая дата в формате год-месяц-день_часы-минуты
date_time=`date +"%Y-%m-%d_%H-%M"`
# Место размещения резервных файлов на Яндекс Диске
yandex_dir='/mnt/yandex/site_name.ru/day'
# Абсолютный путь к папке на сервере
server_dir='/home/admin/web/site_name.ru/public_html/wp-content/'
# Название директории с файлами (после абсолютного пути)
files_dir='themes'
# Данные базы MySQL
# Имя базы
bd_name='имя'
# Имя пользователя
user='имя'
# Пароль пользователя
password='пароль'
# Монтируем Яндекс Диск
mount -t davfs https://webdav.yandex.ru /mnt/yandex/
# Создаём архив
/usr/bin/tar -czvf $yandex_dir/files_$date_time.tar.gz -C $server_dir $files_dir
# Выгружаем базу данных
/usr/bin/mysqldump --opt -v --databases $bd_name -u$user -p$password | /usr/bin/gzip -c > $yandex_dir/mysql_$date_time.sql.gz
# Удаляем архивы старше 7 дней
/usr/bin/find $yandex_dir -type f -mtime +7 -exec rm {} \;
# Отключаем Яндекс Диск
umount /mnt/yandex

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

Ручной запуск скрипта:

sh /my_scripts/backup_webdav_day.sh

Еженедельная полная резервная копия

Создаём копию для всего сайта.

Создаём файл скрипта backup_webdav_week.sh:

nano /my_scripts/backup_webdav_week.sh

Записываем в этот файл:

#!/bin/sh
# Текущая дата в формате год-месяц-день_часы-минуты
date_time=`date +"%Y-%m-%d_%H-%M"`
# Место размещения резервных файлов на Яндекс Диске
yandex_dir='/mnt/yandex/site_name.ru/week'
# Абсолютный путь к папке на сервере
server_dir='/home/admin/web/site_name.ru/'
# Название директории с файлами (после абсолютного пути)
files_dir='public_html'
# Данные базы MySQL
# Имя базы
bd_name='имя'
# Имя пользователя
user='имя'
# Пароль пользователя
password='пароль'
# Монтируем Яндекс Диск
mount -t davfs https://webdav.yandex.ru /mnt/yandex/
# Создаём архив
/usr/bin/tar -czvf $yandex_dir/files_$date_time.tar.gz -C $server_dir $files_dir
# Выгружаем базу данных
/usr/bin/mysqldump --opt -v --databases $bd_name -u$user -p$password | /usr/bin/gzip -c > $yandex_dir/mysql_$date_time.sql.gz
# Удаляем архивы старше 30 дней (будет создано не более 4 резервных копии)
/usr/bin/find $yandex_dir -type f -mtime +30 -exec rm {} \;
# Отключаем Яндекс Диск
umount /mnt/yandex

Ручной запуск скрипта:

sh /my_scripts/backup_webdav_week.sh

Ежемесячная полная резервная копия

Создаём копию для всего сайта, которая будет хранится в папке month.

Создаём файл скрипта backup_webdav_month.sh:

nano /my_scripts/backup_webdav_month.sh

Записываем в этот файл:

#!/bin/sh
# Текущая дата в формате год-месяц-день_часы-минуты
date_time=`date +"%Y-%m-%d_%H-%M"`
# Место размещения резервных файлов на Яндекс Диске
yandex_dir='/mnt/yandex/site_name.ru/month'
# Абсолютный путь к папке на сервере
server_dir='/home/admin/web/site_name.ru/'
# Название директории с файлами (после абсолютного пути)
files_dir='public_html'
# Данные базы MySQL
# Имя базы
bd_name='имя'
# Имя пользователя
user='имя'
# Пароль пользователя
password='пароль'
# Монтируем Яндекс Диск
mount -t davfs https://webdav.yandex.ru /mnt/yandex/
# Создаём архив
/usr/bin/tar -czvf $yandex_dir/files_$date_time.tar.gz -C $server_dir $files_dir
# Выгружаем базу данных
/usr/bin/mysqldump --opt -v --databases $bd_name -u$user -p$password | /usr/bin/gzip -c > $yandex_dir/mysql_$date_time.sql.gz
# Удаляем архивы старше 180 дней (будет создано не более 6 резервных копии)
/usr/bin/find $yandex_dir -type f -mtime +180 -exec rm {} \;
# Отключаем Яндекс Диск
umount /mnt/yandex

Ручной запуск скрипта:

sh /my_scripts/backup_webdav_month.sh

Ошибка line 20: /usr/bin/tar: No such file or directory

Если возникает подобная ошибка, значит tar находится в другой директории. Попробуйте изменить /usr/bin/tar на /bin/tar. И запустить скрипт ещё раз.

Добавляем задания в CRON

Открываем файл CRON

nano /etc/crontab

Добавляем данные:

# Backup to Yandex Disk
# ежедневно в 2:00
00 2 * * * root /my_scripts/backup_webdav_day.sh >/dev/null 2>&1
# еженедельно в 2:20 в понедельник
20 2 * * 1 root /my_scripts/backup_webdav_week.sh >/dev/null 2>&1
# ежемесячно в 3:00 каждого 1-го числа месяца
00 3 1 * * root /my_scripts/backup_webdav_month.sh >/dev/null 2>&1

Для работы скрипта через cron, нужно назначить правильные права доступа на файлы. Иначе будет отказано в доступе. Для этого в командной строке выполняем:

cd /my_scripts/
chmod +x backup_webdav_day.sh
chmod +x backup_webdav_week.sh
chmod +x backup_webdav_month.sh

Делаем для скриптов резервную копию

Копируем папку со скриптами в корневой каталог сайта.

Можно и вовсе не делать скрипты в корневой папке сервера, а сразу сделать скрипты в корне сайта и подцеплять их через CRON. Тогда скрипты можно создавать через FTP-клиент, а консоль понадобится только для редактирования файла cron. Но в этом случае Cron может и не заработать, каких-то настроек ему будет не хватать.

Создаём скрипт очищающий временную папку с кэшем

При создании резервных копии содержимое остаётся в папке с кэшем /var/cache/davfs2/, что приводит к переполнению жесткого диска. Решаем эту задачу созданием специального скрипта. Подробнее в статье переполнение кэша davfs2.

Как разархивировать архив

Для восстановления резервных файлов на сервере используем рекомендациями из статьи «быстрое восстановление резервных копий на сервере Linux».

У сайта нет цели самоокупаться, поэтому на сайте нет рекламы. Но если вам пригодилась информация, можете лайкнуть страницу, оставить комментарий или отправить мне подарок на чашечку кофе.

Комментарии к статье “Создаём резервные копии и перемещаем на Яндекс Диск” (2)

  • Илья
    18.11.2020 в 17:46

    Здравсвуйте. Скажите, пожалуйста, как делать копию нескольких папок
    /var/www/html/site1
    /var/www/html/site2
    /var/www/html/site3
    /var/www/html/site4

    В этих папках отдельные сайты, нужно папку site1 и все папки и файлы которые в ней забекапить

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

Напишите свой комментарий, если вам есть что добавить/поправить/спросить по теме текущей статьи:
"Создаём резервные копии и перемещаем на Яндекс Диск"