CentOS 7 + Google Drive + Backup

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

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

Теперь запустим 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 — пароль, который использовался для шифрования

Add a Comment