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] [<remotepaths>...]
       megaput [--no-progress] [--path <remotepath>] <paths>...
       megamkdir <remotepaths>...
       megamkdir /Contacts/<contactemail>
       megaget [--no-progress] [--path <path>] <remotepaths>...
       megaget --path - <remotefile>
       megarm <remotepaths>...
       megarm /Contacts/<contactemail>
       megadl [--no-progress] [--path <path>] <links>...
       megadl --path - <filelink>
       megareg [--scripted] --register --email <email> --name <realname> --password <password>
       megareg [--scripted] --verify <state> <link>

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

В домашнем каталоге создаём файл .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/