Бекап в облако 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/