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

Admin Bash, CentOS, Linux, 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».

Если вам пригодилась информация, вы можете поблагодарить автора сайта символическим пожертвованием:

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

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