CentOS 7 [CWP7]: автоматичне створення резервних копій (BACKUP) та вивантаження їх на Google Drive

Одного разу я перейнявся питанням резервного копіювання декількох сайтів, бекапи яких не було куди складати. І тут в голову прийшла чудова ідея використовувати в якості сховища резервних копій GoogleDrive. За запитом “centos 7 google drive” в пошукових системах виводиться велика кількість статей по його підключенню. У цих статтях в основному фігурують два проекти – google-drive-ocamlfuse (посилання на github https://github.com/astrada/google-drive-ocamlfuse ) і gdrive (посилання на github https://github.com/prasmussen/ gdrive ). Установка gdrive на CentOS 7 для роботи з гугл-диском мені здалася набагато простіше. Про його налаштуванні я і напишу в цій замітці. Також залишу тут приклад bash-скрипта для створення резервної копії зблек джек і ш …шифруванням, копіюванням на Google Drive, і відправкою оповіщення на e-mail.

Установка і настройка gdrive

# wget -O drive https://drive.google.com/uc?id=0B3X9GlR6EmbnMHBMVWtKaEZXdDg  
# mv drive /usr/sbin/drive  
# chmod +x /usr/sbin/drive

Все, gdrive встановлений. Ну дуже просто)

Тепер запустимо drive для запуску процесу авторизації.

# drive

З’явиться наступне повідомлення:

Go to the following link in your browser:
https://accounts.google.com/o/oauth2/authclient_id=367116221053-7n0vf5akeru7on6o2fjdfsadoe99eg.apps.googleusercontent.com&redirect_uri=ur%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&response_type=code&scope=https%3A%2F%2Fwww.googleapis.com2Fauth%2Fdrive&state=state

Enter verification code: 

Необхідно скопіювати і відкрити це посилання в браузері. Після авторизації з’явиться наступна сторінка:

Тиснемо кнопку “Дозволити”, після чого відкриється сторінка з нашим кодом для перевірки:

Копіпаст цей код в консоль і підтверджуємо:

Enter verification code: 5/8r1pjcEwaRzIpF88QdA0CTwV0lacGXAE6x8czOFK6k9

Все gdrive налаштований.

Перевіримо його роботу. Створимо простий текстовий файл і скопіюємо його на гугл-диск:

# echo test > test.txt
# drive upload --file test.txt 

де

  • –file test.txt – файл, який потрібно скопіювати.

Після виконання команди drive uploadв консоль виводиться інформація про завантаженому файлі.

Id: 0B4KhH190NxVwZ0VQRzlFbXhkVHM
Title: test.txt
Size: 5.0 B
Created: 2016-08-26 12:58:04
Modified: 2016-08-26 12:58:04
Owner: Test Account
Md5sum: d8e8fca2dc0f896fd7cb4cb0031ba249
Shared: False
Parents: 0AIKhH190NxVwUk9PVA
MIME Type: text/plain; charset=utf-8
Uploaded 'test.txt' at 5.0 B/s, total 5.0 B

Для перегляду вмісту диска використовується команда drive list:

# drive list
Id                             Title      Size    Created               
0B4KhH190NxVwZ0VQRzlFbXhkVHM   test.txt   5.0 B   2016-08-26 12:58:04   

Відкриємо в браузері наш гугл-диск, щоб ще раз переконатися, що файл все-таки скопіювали.

Для видалення файлу необхідно використовувати наступну команду:

# drive delete --id 0B4KhH190NxVwZ0VQRzlFbXhkVHM
Removed file 'test.txt'

де

  • 0B4KhH190NxVwZ0VQRzlFbXhkVHM – Id файлу, який потрібно видалити.

Скрипт резервного копіювання

Тепер перейдемо до нашого скрипту. Нижче наведено лістинг скрипта, який виконує:

  • mysqldump всіх баз даних web-сервера
  • створює tar.gz архів необхідних директорій (в цей же архів включені і дамп-файли баз)
  • зашифровує отриманий архів за допомогою OpenSSL
  • відправляє зашифрованістю архів на Google Drive (після завершення видаляє зашифрований архів з локальної директорії)
  • відправляє звіт про результат на e-mail
  • на всякий випадок, зберігаємо останні копії за 7 днів локально на сервері для швидкого розгортання.

Перелік програм:

#!/bin/bash

DATE=`date +%Y-%m-%d`
DIR=/backup
LIST=/tmp/db.list
MYSQLPWD=r00tpa55w0r9
ARCHNAME=backup_sites
HOSTNAME=Web-server-57
EMAIL=cojuhar.vadim@gmail.com

## Удаляем архивы старше 7 дней из локальной директории для бэкапов
find $DIR -mtime +7 -delete

## Создаем дамп-файлы всех баз нашего сервера
echo 'show databases;' | mysql -u root -p$MYSQLPWD | grep -v -e Database -e information_schema -e performance_schema -e mysql > $LIST 
for DBNAME in `cat $LIST`
do
      mysqldump -u root -p$MYSQLPWD $DBNAME > $DIR/$DBNAME-$DATE.sql
done

## Создаем tar-архив необходимых директорий. В него же включаем дамп-файлы наших баз
tar -czf $DIR/$ARCHNAME-$DATE.tar.gz \
/var/sites \
/root \
/etc \
/home \
$DIR/*-$DATE.sql

## Зашифруем созданный архив
openssl enc -aes-256-cbc -salt -a -in "$DIR/$ARCHNAME-$DATE.tar.gz" -out "$DIR/$ARCHNAME-$DATE.tar.gz.enc" -pass 'pass:veRyStr0ngpa55w0r9'

## Загрузим зашифрованный архив на Google Drive
drive upload --file $DIR/$ARCHNAME-$DATE.tar.gz.enc

## Удаляем зашифрованный архив из локальной директории для бэкапов
rm -f $DIR/$ARCHNAME-$DATE.tar.gz.enc

## Проверим наличие резервной копии на Google Drive и отправим отчет о результате на e-mail
RESULT="$(drive list | awk '{print $2}' | grep -ic $ARCHNAME-$DATE.tar.gz.enc)"
if [ "$RESULT" != 1 ]; then
        echo "Oops! Something went wrong! There is no backup :( " | mutt -s "$HOSTNAME: Backup ERROR at $DATE!" $EMAIL
else
        echo "Creating and copying the backup file of $HOSTNAME at $DATE completed successfully." | mutt -s "$HOSTNAME: Successfull backup at $DATE" $EMAIL
fi

Як я писав вище, перед відправкою на Google Drive архів резервної копії шифрується за допомогою openssl. Для розшифровки архіву необхідно виконати:

$ openssl enc -aes-256-cbc -d -a -in "archive-name.tar.gz.enc" -out "archive-name.tar.gz" -pass 'pass:veRyStr0ngpa55w0r9'

де

  • archive-name.tar.gz.enc – зашифрований архів
  • archive-name.tar.gz – архів, який ми хочемо отримати
  • veRyStr0ngpa55w0r9 – пароль, який використовувався для шифрування

А про те, як налаштувати mutt для відправки листів можете прочитати в цій статті – CentOS 7: Налаштування mutt для відправки звітів.

Тепер залишилося створити заплановане завдання в cron і чекати бекапов на свій Google Drive.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *