Не так давно, ми розміщували статтю про підключення популярних безкоштовних хмарних сховищ на сервері з CentOS 7. У цій статті ми покажемо, як можна використовувати дані сховища для резервного копіювання даних з вашого сервера. Я використовую ці скрипти для додаткового резервного копіювання файлів сайту і бази даних зі свого Linux VPS сервера.

Backup даних на OneDrive ізLinux CentOS

Ми будемо виконувати резервне копіювання сайту і бази даних, а також виконувати перевірку на «вік» бекапа (видаляти бекапи тижневої давності) і відправляти на пошту звіт з повною інформацією виконання скрипта. Власне, сам 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
drwxr-xr-x 2 root root 102 Sep 3 17:02 .
drwxr-xr-x 5 root root 94 Sep 3 11:15 ..
-rw-r--r-- 1 root root 9643081 Sep 3 17:00 backup-1909031700.tar.gz
-rw-r--r-- 1 root root 9643082 Sep 3 17:01 backup-1909031701.tar.gz
-rw-r--r-- 1 root root 9643083 Sep 3 17:02 backup-1909031702.tar.gz
Initializing the Synchronization Engine ...
Syncing changes from local path first before downloading changes from OneDrive ...
Deleting item from OneDrive: backup/backup-1909031700.tar.gz
Deleting item from OneDrive: backup/backup-1909031701.tar.gz
Deleting item from OneDrive: backup/backup-1909031702.tar.gz
Uploading new file ./backup/backup-1909031704.tar.gz ...
Uploading 100% |oooooooooooooooooooooooooooooooooooooooo| DONE IN 00:00:04
done.
Processing 6 changes

Перевіряємо хмара, все три архіву з резервних копій тут:

резервне копіювання одного диска

Наступним кроком, я видалив створені резервні копії з директорії на сервері і знову запустив скрипт. Висновок вмісту директорії на сервері:

ls -la /root/OneDrive/backup/

total 9420
drwxr-xr-x 2 root root 38 Sep 3 17:04 .
drwxr-xr-x 5 root root 94 Sep 3 11:15 ..
-rw-r--r-- 1 root root 9643082 Sep 3 17:04 backup-1909031704.tar.gz

Пройшовши в веб-інтерфейс OneDrive я побачив, що резервні копії видалили і звідти, автоматично.

скрипт бекапа сайту з linux на OneDrive

Так само після виконання скрипта, мені прийшов лист на пошту:

звіт про бекапе на email Ось і все, на цьому резервне копіювання на OneDrive закінчено.

Резервне копіювання на Google Диск.

З резервним копіюванням в 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'
Removed file 'DSC_2153.NEF'
Removed file 'DSC_2159.NEF'
Removed file 'DSC_2226.NEF'
Removed file 'DSC_2225.NEF'
Проверим наличие файла в Google Drive:

drive list
Id Title Size Created
1oay3-FAWBZRjHtma1cRTLrOvf3t8hRpD backup-20190904.tar.gz 9.6 MB 2019-09-04 14:43:25

З веб-інтерфейсу його так само видно, як і з консолі:

linux - Створення резервних копій на Google Диск

Таким чином ми отримуємо скрипт, який виконує перевірку на наявність старих резервних копій в хмарі Google Диск, видаляє їх якщо вони потрапляють під вимоги, після чого створює резервну копію сайту і відправляє її в цей же хмара.

Скрипт бекапу на Яндекс.Діск з Linux

Дане хмарне сховище я залишив на закуску, так як резервне копіювання в Яндекс.Діск є найпростішим, тому що ми змонтували хмарне сховище Яндекс через 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

І так далі, налаштуйте бекапи як вам зручно, коли навантаження на сервері мінімальна.

Leave a Reply

Your email address will not be published. Required fields are marked *