Автоматическое резервное копирование сервера в облако Mega

Mega.nz — это сервис облачного хранения данных, который по заявлению основателей хранит всю информацию в зашифрованном виде. При постановке задачи резервного копирования для небольшого личного сервера немаловажным стал тот факт, что Mega предоставляет бесплатно 50 Gb облачного пространства. Очевидно, что для корпоративного сервера этот вариант резервного копирования не подойдет, так как опыт показывает что объемы информации там значительно превышают отметку в 50 Gb.

Для реализации этой цели у Mega есть кроссплатформенная консольная утилита для работы с облаком, присутствует поддержка распостраненных Linux дистрибутивов. Загрузить последнюю версию программы можно на официальной странице.

После скачивания, заливаем установочный файл на сервер через SFTP или же любым удобным для вас способом. Установка на Debian-based дистрибутивы осуществляется таким образом:

sudo dpkg -i megacmd-xUbuntu_14.04_amd64.deb

После установки нужно запустить утилиту и войти в свой аккаунт. Если у вас его еще нет, то самое время зарегистрироваться.

mega-cmd

В консоли MegaCMD вход осуществляется так:

login {ваша@почта}
{пароль}

Если данные аккаунта введены правильно, то увидим сообщение об успешной авторизации «Login complete as {ваша@почта}».

Теперь определимся что именно должно входить в резервную копию. Мне нужно иметь свежие копии:

  • Моих веб-сайтов;
  • Баз данных MySQL от веб-сайтов;
  • Конфигурационных файлов (из директории /etc);

Можно было бы включить в данный список и логи посещений веб-сайтв, логи авторизации и т .д., но они очень быстро наполняются даже во время их архивирования скриптов, так что от этой идеи временно отказался. Если у вас есть еще какие-либо важные обновляемые данные на сервере, то их легко можно добавить в скрипт.

Когда четко ясно что нужно архивировать, можно приступать к написанию скрипта. Создадим его под именем megabackup.sh в домашней папке пользлвателся root.

sudo nano /root/megabackup.sh
#!/bin/bash
##### Переменные скрипта
# Имя сервера (задавайте любое)
SERVER="My_Own_SRV"
# Срок устаревания бекапа (в днях)
DAYS_TO_BACKUP=5
# Временная папка
WORKING_DIR="/root/backup_tmp_dir"
# Если true, то бекапит MySQL
BACKUP_MYSQL="true"
# Учетная записть mysql с root правами
MYSQL_USER="root"
MYSQL_PASSWORD="password"
# Корневой каталог веб-сервера Apache2
DOMAINS_FOLDER="/var/www"
##################################
# Убиваем все сессии mega-cmd
pkill mega-cmd
# Новая сессия mega-cmd в свернутом screen
screen -dmS mega mega-cmd
# Создать временную папку
rm -rf ${WORKING_DIR}
mkdir ${WORKING_DIR}
cd ${WORKING_DIR}
# Заархивировать /etc
cd /
tar cJf ${WORKING_DIR}/etc.tar.gx etc
cd - > /dev/null
# Заархивировать MySQL
if [ "${BACKUP_MYSQL}" = "true" ]
then
 mkdir ${WORKING_DIR}/mysql
 for db in $(mysql -u${MYSQL_USER} -p${MYSQL_PASSWORD} -e 'show databases;' | grep -Ev "^(Database|mysql|information_schema|performance_schema|phpmyadmin)$")
 do
 #echo "processing ${db}"
 mysqldump --opt -u${MYSQL_USER} -p${MYSQL_PASSWORD} "${db}" | gzip > ${WORKING_DIR}/mysql/${db}_$(date +%F_%T).sql.gz
 done
 #echo "all db now"
 mysqldump --opt -u${MYSQL_USER} -p${MYSQL_PASSWORD} --events --ignore-table=mysql.event --all-databases | gzip > ${WORKING_DIR}/mysql/ALL_DATABASES_$(date +%F_%T).sql.gz
fi
# Заархивировать файлы веб-сайтов
mkdir ${WORKING_DIR}/domains
for folder in $(find ${DOMAINS_FOLDER} -mindepth 1 -maxdepth 1 -type d)
do
 cd $(dirname ${folder})
 tar cJf ${WORKING_DIR}/domains/$(basename ${folder}).tar.xz $(basename ${folder})
 cd - > /dev/null
done
##################################
# Перестраховка от dbus ошибок (например если архивируемый файл изменится)
export $(dbus-launch)
# Создание базовой папки
[ -z "$(mega-ls --reload /Root/backup_${SERVER})" ] && mega-mkdir -p /Root/backup_${SERVER}
# Чистим устаревшее
while [ $(mega-ls --reload /Root/backup_${SERVER} | grep -E "/Root/backup_${SERVER}/[0-9]{4}-[0-9]{2}-[0-9]{2}$" | wc -l) -gt ${DAYS_TO_BACKUP} ]
do
 TO_REMOVE=$(mega-ls --reload /Root/backup_${SERVER} | grep -E "/Root/backup_${SERVER}/[0-9]{4}-[0-9]{2}-[0-9]{2}$" | sort | head -n 1)
 mega-rm ${TO_REMOVE}
done
# Создание папки под текущий бекап
curday=$(date +%F)
mega-mkdir -p /Root/backup_${SERVER}/${curday} 2> /dev/null
# ВЫГРУЗКА БЕКАПА В ОБЛАКО
mega-put ${WORKING_DIR} -c /Root/backup_${SERVER}/${curday} > /dev/null
# Убиваем dbus и mega-cmd сессию
kill ${DBUS_SESSION_BUS_PID}
rm -f ${DBUS_SESSION_BUS_ADDRESS}
pkill mega-cmd
# Очистка временных файлов
rm -rf ${WORKING_DIR}
exit 0

Внесите свои правки в скрипт и сохраните его. Теперь нужно сделать скрипт исполняемым и доступным только для root.

sudo chmod a+x /root/megabackup.sh
sudo chmod 750 /root/megabackup.sh

Теперь проверим как все работает. Запускаем скрипт от root.

sudo su
cd /root
./megabackup.sh

До и после выполнения скрипта я вывел в консоль текущее время, для того чтобы отследить сколько он выполнялся.

Как видно из скриншота выше, скрипт отработал за 2 минуты, никаких ошибок в консоль не вывел. Теперь зайдем в аккаунт Mega используя браузер и проверим все ли файлы на месте.

В завершение добавим скрипт в crontab для того чтобы он выполнялся автоматически по определенному расписанию. Чтобы отредактировать crontab, воспользуйтесь следующей командой:

crontab -e

Затем добавьте одну из строчек:

  1. Для резервного копирования каждый день в полночь:
    0 0 * * * /root/megabackup.sh
  2. Каждые 3 дня в полночь:
    0 0 */3 * * /root/megabackup.sh
  3. Каждую неделю в воскресенье в полночь:
    0 0 * * 0 /root/megabackup.sh
  4. Каждый первый день месяца в полночь:
    0 0 1 * * /root/megabackup.sh
  5. Сгенерировать свое правило поможет наш сервис.
    Генератор Crontab Генератор Crontab

Мне больше всего подходит период раз в 3 дня.

Для применения изменений планировщика, перезапускаем cron:

sudo service cron restart

В моем случае средний размер одной резервной копии у меня составляет 100 Mb.

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

50 Gb ≈ 50.000 Mb / 100 Mb = 500 Бекапов

Отсюда можно сделать вывод что даже бесплатного тарифа на Mega.nz хватит чтобы всегда иметь свежую резервную копию личного сервера, не потратив свои кровные на услуги бекапа от хостинг компании у которой вы арендуете сервер.

 

ShiftHackZ

ShiftHackZ

Автор блога LocalHost // Blog. Интересуюсь компьютерными технологиями, системным администрированием и веб-разработкой. Днями напролет провожу время за своим компьютером и самосовершенствуюсь. Подробнее

Читайте также:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *