Не так давно, мы размещали статью о подключении популярных бесплатных облачных хранилищ на сервере с CentOS 7 . В этой статье мы покажем, как можно использовать данные хранилища для резервного копирования данных с вашего сервера. Я использую эти скрипты для дополнительного резервного копирования файлов сайта и базы данных со своего Linux VPS сервера.
Мы будем выполнять резервное копирование сайта и базы данных, а также выполнять проверку на «возраст» бэкапа (удалять бэкапы недельной давности) и отправлять на почту отчет с полной информацией выполнения скрипта. Собственно, сам bash скрипт:
#!/bin/bash
#Копируем файлы сайта во временную директорию
rsync -avzr --progress /var/www/html/ /var/www/tmp/backup/ >> result.txt
#Выполняем дамп базы, помещаем файл дампа во временную директорию
mysqldump joomla > /var/www/tmp/backup/backup.sql
#Создаем архив временной директории
tar -cvzf backup-$(date +%y%m%d).tar.gz --absolute-names /var/www/tmp/backup/ >> result.txt
#Проверяем директорию облака на наличие старых бэкапов, если таковые есть, удаляем
find /root/OneDrive/backup/ -name "backup*.tar.gz" -mtime +7 -exec rm -f {} ; >> result.txt
#Копируем созданный ранее архив в облако
rsync -avzr --progress /root/bin/backup*.tar.gz /root/OneDrive/backup/ >> result.txt
#Удаляем архив с директории скрипта
rm -rf /root/bin/backup*.tar.gz >> result.txt
#Выполняем синхронизацию с облаком с флагом —local-first, что позволит удалить старые бэкапы с облака, если мы их удаляли локально и закачать новые бэкапы
onedrive --local-first --synchronize >> result.txt
#Отправляем письмо с вложенным файлом, где отображен весь процесс резервного копирования (замените на свой ящик)
echo "Посмотрите файл на наличие ошибок и исправьте их" | mail -a "/root/bin/result.txt" -s "Резервная копия создана" -- ******@gmail.com
#Чистим директории от ненужных файлов
rm -rf /root/bin/result.txt && rm -rf /var/www/tmp/backup/*
Предварительно перед написанием статьи, я создал уже несколько бэкапов, чтобы можно было продемонстрировать, что скрипт работает корректно (удаляет старые бэкапы и закачивает новые).
Я запустил 3 раза вручную. Были созданы несколько резервных копий, после чего они все успешно были отправлены в облако:
ls -la /root/OneDrive/backup/
total 28260_x000D_drwxr-xr-x 2 root root 102 Sep 3 17:02 ._x000D_drwxr-xr-x 5 root root 94 Sep 3 11:15 .._x000D_-rw-r--r-- 1 root root 9643081 Sep 3 17:00 backup-1909031700.tar.gz_x000D_-rw-r--r-- 1 root root 9643082 Sep 3 17:01 backup-1909031701.tar.gz_x000D_-rw-r--r-- 1 root root 9643083 Sep 3 17:02 backup-1909031702.tar.gz_x000D_Initializing the Synchronization Engine ..._x000D_Syncing changes from local path first before downloading changes from OneDrive ..._x000D_ Deleting item from OneDrive: backup/backup-1909031700.tar.gz_x000D_Deleting item from OneDrive: backup/backup-1909031701.tar.gz_x000D_Deleting item from OneDrive: backup/backup-1909031702.tar.gz_x000D_Uploading new file ./backup/backup-1909031704.tar.gz ..._x000D_Uploading 100% |oooooooooooooooooooooooooooooooooooooooo| DONE IN 00:00:04_x000D_done._x000D_Processing 6 changes
Проверяем облако, все три архива с резервными копиями здесь:
Следующим шагом, я удалил созданные резервные копии с директории на сервере и снова запустил скрипт. Вывод содержимого директории на сервере:
ls -la /root/OneDrive/backup/
total 9420_x000D_drwxr-xr-x 2 root root 38 Sep 3 17:04 ._x000D_drwxr-xr-x 5 root root 94 Sep 3 11:15 .._x000D_-rw-r--r-- 1 root root 9643082 Sep 3 17:04 backup-1909031704.tar.gz_x000D_
Пройдя в веб-интерфейс OneDrive я увидел, что резервные копии удалили и оттуда, автоматически.
Так же после выполнения скрипта, мне пришло письмо на почту:
С резервным копированием в Google Диск в се вышло не так просто как с OneDrive, хотя сама настройка довольно простая. Основная проблема возникла с удалением старых бэкапов с Google Drive, так как на сервер не монтируется директория хранилища. Но после долгого изучения справки drive help, удалось модернизировать наш уже ранее используемый скрипт.
#!/bin/bash
#удаляем файлы которые старше 7дней с g.drive
/usr/sbin/drive list -q "modifiedDate < '$(date -d '-7 day' '+%Y-%m-%d')'" | cut -d" " -f1 - | xargs -L 1 drive delete -i
rsync -avzr --progress /var/www/html/ /var/www/tmp/backup/ >> result.txt
mysqldump joomla > /var/www/tmp/backup/backup.sql
tar -cvzf backup-$(date +%Y%m%d).tar.gz --absolute-names /var/www/tmp/backup/ >> result.txt
#закачиваем файл на g.drive
/usr/sbin/drive upload -f /root/bin/backup*.tar.gz >> result.txt
rm -rf /root/bin/backup*.tar.gz >> result.txt
echo "Посмотрите файл на наличие ошибок и исправьте их" | mail -a "/root/bin/result.txt" -s "Резервная копия создана" -- ******@gmail.com
rm -rf /root/bin/result.txt
rm -rf /var/www/tmp/backup/*
Остальные шаги в скрипте я не расписывал, так как они повторяются с предыдущими.
Запустив скрипт, он выполнился:
sh backup_gdrive.sh
Removed file 'DSC_2151.NEF'_x000D_Removed file 'DSC_2153.NEF'_x000D_Removed file 'DSC_2159.NEF'_x000D_Removed file 'DSC_2226.NEF'_x000D_Removed file 'DSC_2225.NEF'
Проверим наличие файла в Google Drive:_x000D__x000D_drive list
Id Title Size Created_x000D_1oay3-FAWBZRjHtma1cRTLrOvf3t8hRpD backup-20190904.tar.gz 9.6 MB 2019-09-04 14:43:25
С веб-интерфейса его так же видно, как и с консоли:
Таким образом мы получаем скрипт, который выполняет проверку на наличие старых бэкапов в облаке Google Диск, удаляет их если они попадают под требования, после чего создает резервную копию сайта и отправляет ее в это же облако.
Данное облачное хранилище я оставил на закуску, так как резервное копирование в Яндекс.Диск является самым простым, т.к. мы смонтировали облачное хранилище Яндекс через WebDav как отдельное дисковое утсройство . Способ все тот же, мы запускаем скрипт, только лишь с небольшой разницей, не нужно делать синхронизацию или заливку файлов специальными командами, работаем как с обычным серверным каталогом. Синхронизация каталога выполняется с помощью rsync . Скрипт будет иметь вид:
#!/bin/bash
rsync -avzr --progress /var/www/html/ /var/www/tmp/backup/ >> result.txt
mysqldump joomla > /var/www/tmp/backup/backup.sql
tar -cvzf backup-$(date +%Y%m%d).tar.gz --absolute-names /var/www/tmp/backup/ >> result.txt
find /mnt/yad/ -name "backup*.tar.gz" -mtime +7 -exec rm -f {} ; >> result.txt
rsync -avzr --progress /root/bin/backup*.tar.gz /mnt/yad/ >> result.txt
rm -rf /root/bin/backup*.tar.gz >> result.txt
echo "Посмотрите файл на наличие ошибок и исправьте их" | mail -a "/root/bin/result.txt" -s "Резервная копия создана" -- ****@gmail.com
rm -rf /root/bin/result.txt
rm -rf /var/www/tmp/backup/*
Все тоже самое, только без лишних команд. Если у вас другие пути до облачных хранилищ, меняйте в скрипте на свои.
В конце статьи хотелось бы добавить. Я разместил указанные скрипты в отдельную директорию и запускают их по крону. Если дисковое пространство на ваших облачных дисках позволяет часто создавать бэкапы, создавайте их как можно чаще, я рекомендую не реже одного раза в 3 дня. Используйте ресурсы облачных хранилищ на все 100%.
Примеры заданий в кроне:
0 0 * * 6 /root/bin/backup.sh
— запускаем скрипт бэкапа каждую субботу в 00-00
0 0 */3 * * /root/bin/backup.sh
— запускаем скрипт бэкапа каждые 3 дня в 00-00
И так далее, настройте бэкапы как вам удобно, когда нагрузка на сервере минимальна.
Если говорить о том, какие лучшие дистрибутивы Linux мы знаем, то этот список может быть…
Хотя Ubuntu и поставляется со встроенным обозревателем Firefox многие пользователи считают что это не самая…
Что такое Remmina? Remmina — это совершенно бесплатный и свободный клиент так называемого удаленного рабочего…
Как мы знаем, Ubuntu это самая популярная сборка из систем на базе ядра Linux. У…
Выбор ноутбука для каждого пользователя это довольно кропотливый процесс. Люди стараются подобрать ноутбук который будет…
Если вы решили ознакомиться с операционной системой Linux более детально и задались вопросом как установить…