Описание создания резервных копий файлов своего сайта на сервере 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:
sudo mkdir my_scripts
nano /my_scripts/backup_webdav_day.sh
Скрипт будет сохранять ежедневные копии базы данных MySQL и также папку themes (шаблона сайта для WordPress). Я частенько совершенствую дизайн сайта и добавляю какие-нибудь новые элементы. И мне важно иметь копии этих данных на каждый день.
Можно папку themes поменять на любую другую. Например на папку загрузки изображений, в WordPress это папка – uploads. Если вы пишите статьи каждый день и загружаете картинки в каждую статью, то для вас может быть важным создание ежедневных резервных копий всех скриншотов на сайте.
Записываем в файл backup_webdav_day.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
Можно копировать не только весь сайт целиком, но и отдельные папки. Правим пути, выбрав нужные папки, затем сохраняем скрипт.
Ручной запуск скрипта:
Еженедельная полная резервная копия
Создаём копию для всего сайта.
Создаём файл скрипта backup_webdav_week.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
Ручной запуск скрипта:
Ежемесячная полная резервная копия
Создаём копию для всего сайта, которая будет хранится в папке month.
Создаём файл скрипта backup_webdav_month.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
Ручной запуск скрипта:
Ошибка line 20: /usr/bin/tar: No such file or directory
Если возникает подобная ошибка, значит tar находится в другой директории. Попробуйте изменить /usr/bin/tar на /bin/tar. И запустить скрипт ещё раз.
Добавляем задания в CRON
Открываем файл CRON
Добавляем данные:
# ежедневно в 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, нужно назначить правильные права доступа на файлы. Иначе будет отказано в доступе. Для этого в командной строке выполняем:
chmod +x backup_webdav_day.sh
chmod +x backup_webdav_week.sh
chmod +x backup_webdav_month.sh
Делаем для скриптов резервную копию
Копируем папку со скриптами в корневой каталог сайта.
Создаём скрипт очищающий временную папку с кэшем
При создании резервных копии содержимое остаётся в папке с кэшем /var/cache/davfs2/, что приводит к переполнению жесткого диска. Решаем эту задачу созданием специального скрипта. Подробнее в статье переполнение кэша davfs2.
Как разархивировать архив
Для восстановления резервных файлов на сервере используем рекомендациями из статьи «быстрое восстановление резервных копий на сервере Linux».
Здравсвуйте. Скажите, пожалуйста, как делать копию нескольких папок
/var/www/html/site1
/var/www/html/site2
/var/www/html/site3
/var/www/html/site4
В этих папках отдельные сайты, нужно папку site1 и все папки и файлы которые в ней забекапить
Сделайте отдельный скрипт под каждый сайт.