Backup сервера прямо в Яндекс.Диск

В предыдущих двух статьях я настраивал LAMP на VPS и прикручивал к нему nginx. Следующее, о чем сразу начинаешь думать — как бы все это не потерять. То есть речь заходит о резервном копировании.

Обсудим по порядку: что, куда и как бэкапить.

Что

  1. Все конфиги, которые вы с кропотливо редактировали (/etc)
  2. Все пользовательские файлы (/home, /root)
  3. Базы данных (будем иметь в виду MySQL)

Куда

Нынче всё уходит в “облака”. Резервные копии хочется складывать туда же.

Весьма интересным вариантом для хранения бэкапа оказался Яндекс.Диск. У него есть несколько преимуществ:

  • Бесплатные 10 Гб
  • Он находится в России, и файлы очень быстро на него заливаются
  • Умеет работать по протоколу WebDAV, что позволяет загружать на него данные из консоли с помощью команды curl

Как

Вот рецепт. Логинимся root-ом и создаем скрипт:

touch backup-now.sh

Далее прячем его от посторонних и делаем исполняемым:

chmod 0700 backup-now.sh

Текст скрипта будет примерно таким:

#!/bin/bash

SERVER_NAME="server1"
TIME=`date +%Y-%b`

FS_FILE=/tmp/$SERVER_NAME-fs.$TIME.tar.gz
MYSQL_FILE=/tmp/$SERVER_NAME-mysql.$TIME.sql.gz

# Archiving filesystem
tar -czf $FS_FILE /etc /root /home

# Archiving databases
mysqldump -u root --password=qwerty --all-databases | gzip > $MYSQL_FILE

# Uploading to the cloud
curl --user USER:PASSWORD -T "{$FS_FILE,$MYSQL_FILE}" https://webdav.yandex.ru/

# Cleanup
unlink $FS_FILE
unlink $MYSQL_FILE

Первый раз лучше запускать команды по одной, комментируя остальные. Если все пройдет хорошо, то в вашем Яндекс.Диске появятся два архива.

Теперь для автоматизации надо добавить симлинк на backup-now.sh в /etc/cron.daily (или /etc/cron.weekly). Только имейте в виду, что на некоторых системах (в частности, на Debian) у симлинка надо убрать расширение (подробности).

Переменная $TIME подобрана так, что у вас будут скапливаться бекапы от последнего числа каждого месяца. Если не хотите захламлять облако, то это можно убрать из скрипта, однако практика показывает, что старые копии могут оказаться полезными. Просто надо будет периодически удалять старьё.

А если не хочу Яндекс.Диск?

Очевидно, заливать можно на любой ресурс, поддерживающий WebDAV. Существуют сервисы, открывающие доступ по WebDAV к Dropbox или Google Drive. Ходят слухи, что SkyDrive работает через WebDAV. А также есть надежда, что поддержка появится в Дропбоксе из коробки.

P.S. Шифрование архивов с помощью GnuPG

Поскольку бекапы содержат кучу секретной информации (пароли, данные), то имеет смысл их шифровать:

. . .

GPG_COMMAND="gpg -c -z 0 --batch --passphrase XXXXXXXXXX"

FS_FILE=/tmp/$SERVER_NAME-fs.$TIME.tar.gz.gpg
MYSQL_FILE=/tmp/$SERVER_NAME-mysql.$TIME.sql.gz.gpg

# Archiving filesystem
tar -cz /etc /root /home | $GPG_COMMAND > $FS_FILE

# Archiving databases
mysqldump -u root --password=qwerty --all-databases | gzip | $GPG_COMMAND > $MYSQL_FILE

. . .