Ubuntu 18.04. Бекап сайтов в облако mega.nz через megatools по крону

Бекап в облако mega.co.nz через консоль linux

Задача: бекап выборочных сайтов и баз данных в облако mega.nz по крону.
Имеем аккаунт на https://mega.nz.

Установка megatools из исходников

apt install build-essential libglib2.0-dev libssl-dev libcurl4-openssl-dev
apt install asciidoc
cd /opt
wget https://megatools.megous.com/builds/megatools-1.10.2.tar.gz
tar xfv megatools-1.10.2.tar.gz
cd megatools-1.10.2
./configure --prefix=$HOME
make -j4
make install

После этого файлы megatools будут лежать в каталоге /root/bin (если работа велась из под root)

Версия 1.9.98 из репозитория содержит недоработки и баги, поэтому она не рекомендуется к установке.

в результате имеем следующие утилиты:
megacopy
megadf
megadl
megaget
megals
megamkdir
megaput
megareg
megarm

Из man megatools

       megadf [--free|--total|--used] [--mb|--gb|-h]
       megals [-e] [-h] [--header] [-l] [-R] [-n] [...]
       megaput [--no-progress] [--path ] ...
       megamkdir ...
       megamkdir /Contacts/
       megaget [--no-progress] [--path ] ...
       megaget --path - 
       megarm ...
       megarm /Contacts/
       megadl [--no-progress] [--path ] ...
       megadl --path - 
       megareg [--scripted] --register --email  --name  --password 
       megareg [--scripted] --verify  

Создание конфига с учётной записью

В домашнем каталоге создаём файл .megarc с содержимым:

[Login]
Username = you@mail
Password = youPassword

где Username и Password — логин и пароль на MEGA.

Так как пароль хранится в открытом виде, ограничиваем права

chmod 640 ~/.megarc

Создание скрипта бекапа

Файл /root/script/backup-site.sh

#!/bin/bash

declare -A ARRSITES=( 
	[site1.local]="/var/www/site1.local;wp_site1"
	[site2.local]="/var/www/site2.local;drupal_site2"
	[site3.local]="/var/www/site3.local;custom_db"
)

BACKUP_DIR_LOCAL="/tmp/site"
BACKUP_DIR_MEGA="/Root/site"
LOG="/root/script/log/backup-site.log"

TIMENAME_DIR_MEGA=`date +%Y.%m.%d`
BACKUP_DIR_MEGA_FULL="$BACKUP_DIR_MEGA/$TIMENAME_DIR_MEGA"


echo "[`date '+%T %x'`]: Start" >> $LOG

#==========================================================
# Проверка каталогов и файлов

if [ ! -d "$BACKUP_DIR_LOCAL" ]; then
	mkdir -p $BACKUP_DIR_LOCAL
fi

if [ ! -f "$LOG" ]; then
	touch $LOG
fi


#==========================================================
# Бекап

cd "$BACKUP_DIR_LOCAL"

# key + valye
for DOMAIN in "${!ARRSITES[@]}"; do
	#echo $DOMAIN = ${ARRSITES[$DOMAIN]}
	VALUE=${ARRSITES[$DOMAIN]}
	SITEDIR=`echo $VALUE | cut -d ";" -f 1`
	SITEDB=`echo $VALUE | cut -d ";" -f 2`
	echo "$SITEDIR -- $SITEDB"
	
	if [ ! -d "$SITEDIR" ]; then
		continue
	fi
	
	time tar cfpzP "FILE-${DOMAIN}_(`date +%Y.%m.%d_%H-%M-%S`).tar.gz" $SITEDIR
	time mysqldump $SITEDB | gzip > "MYSQL-${SITEDB}_(`date +%Y.%m.%d_%H-%M-%S`).sql.gz"
done


#==========================================================
# Логируем бекап

echo "[`date '+%T %x'`]: OK Backup" >> $LOG


#==========================================================
# Загрузка на Мегу

megamkdir $BACKUP_DIR_MEGA_FULL >> $LOG 2>&1
megacopy --no-progress --local $BACKUP_DIR_LOCAL --remote $BACKUP_DIR_MEGA_FULL >> $LOG 2>&1


# Логируем загрузку на Мегу
echo "[`date '+%T %x'`]: OK Upload to Mega: $BACKUP_DIR_MEGA_FULL" >> $LOG
echo "[`date '+%T %x'`]: END " >> $LOG
echo "---------------------------------------------------------------------" >> $LOG

# Удаление локального каталога с бекапом
if [ -d "$BACKUP_DIR_LOCAL" ]; then
	rm -rf $BACKUP_DIR_LOCAL
fi

где в массив ARRSITES прописываем в качестве ключа название сайта и в качестве значения путь до сайта и имя базы через точку с запятой ;

declare -A ARRSITES=( 
	[название_сайта]="/путь/до/сайта;имя_базы_данных"
	[название_сайта2]="/путь/до/сайта2;имя_базы_данных2"
)

BACKUP_DIR_LOCAL — локальная папка для временного хранения бекапов, например, /tmp/site
BACKUP_DIR_MEGA — папка для хранения бекапа в облаке MEGA
LOG — файл с логом действий скрипта

Устанавливаем флаг на запуск

chmod +x /root/script/backup-site.sh

В скрипте не используются логин и пароль для mysql подключения. Для mysql-авторизации применяется .my.cnf файл в каталоге пользователя /root.

Добавление задачи в cron

Добавить строку в crontab файл, например /etc/cron.d/my-root
Запуск задания 2 раза в месяц: 1 и 16 числа в 5:00 часа ночи.

0 5 1,16 * * root /root/script/backup-site.sh &>/dev/null

В результате выполнения скрипта в каталоге /tmp/site создадутся архивы сайтов и баз данных, затем в облаке создастся каталог с текущей датой, например /Root/site/2018.11.20 и в неё синхронизируется локальный каталог с бекапами. После локальный каталог /tmp/site удалится.

https://megatools.megous.com
https://github.com/megous/megatools
https://megatools.megous.com/man/megatools.html
https://kurazhov.ru/backup-server-to-mega-nz/