Авторизация

РЕЗЕРВНОЕ КОПИРОВАНИЕ RASPBERRY. MYSQL И NODE-RED, НАСТРОИТЬ.

использование услуги VPNKI Space или любого вашего FTP сервера

Уровень сложности конфигурации – 4 из 5. / Время на прочтение и реализацию – 1-2 часа. Резервное копирование Raspberry. MySQL и node-red, настроить

Резервное копирование для RaspberryPi описано многократно. Вы знаете, что вместо жесткого диска в Raspberry используется обычная SD карта, которая недолговечна. Поэтому осуществлять резервное копирование имеет самый прямой смысл.

В этой инструкции я раскажу как это делает мой RaspberryPi. Он стоит на даче и является центром "умной дачи". Сама "умная дача" состоит из различных программных систем и оборудования.

Ничего уникального мой Raspberry не делает, однако, кое-какие особенности имеются.

 

Что будем резервировать

У меня есть.

  • web сервер на Joomla.
  • база данных MySQL.
  • всякие скрипты автоматизации.
  • система Node-RED.
  • кое-какие единичные картинки с нужных камер видеонаблюдения.

 

Таким образом, я имею два типа источников для резервных копий.

- выбранные базы данных MySQL.

- директории с нужными файлами.

Как часто и куда сохранять

Ввиду того, что Интернет-канал на даче у меня не слишком скоростной, да и трафик дорогой, то я выбрал для себя бэкап в два этапа:

- Ежедневно в 3:30.  Копирование на USB носитель, включенный в RaspberryPi. Храниться резервные копии будут в течение 7 дней. Все что старше подлежит удалению).

- Еженедельно в 4:00 . В систему VPNKI Space по протоколу FTP. Сохраняться резервные копии на сервере будут в течение 30 дней (то есть 4 копии). Все что старше подлежит удалению.

 

Увы, услуга VPNKI Space сейчас недоступна. Однако вы можете использовать любой другой FTP сервер для хранения резервных копий по этой инструкции.

Часть 1. Ежедневный бэкап

Собственно скриптов будет два и они весьма просты. Первый скрипт будет запускаться ежедневно. Второй только - по понедельникам. Начнем с первого.

 

1.1. Находясь в корне системы мы создадим папку, куда будем собирать ежедневный бэкап. В этой инструкции пропущен раздел по монтированию этой папки на USB устройство. Возможно добавлю позже.

sudo mkdir /backup

 

 

1.2. В этой директории создадим файл с названием backup_ed.sh. Здесь ed как напоминание - every day, ежедневно.

sudo touch /backup/backup_ed.sh

 

1.3. Откроем файл в редакторе.

sudo nano /backup/backup_ed.sh

 

Прежде чем мы поместим что-то в этот файл  необходимо дать некоторые комментарии.
Обратите внимание на комментарии к переменным в самом начале файла. Вы можете изменить их под свои нужды.

В моем случае бэкапить нужно три базы данных MySQL и три директории с файлами.

 

Поехали! Вставим следующий текст.

#!/bin/bash
#
# backup all data by cron every day.
# Stdout and Stderr redirects to log-file.
#
# Example start - ./backup_ed.sh
#

### Переменные ###
log="/var/log/backup.log" # файл лога.
old="7" # дней хранения бэкапов.

mysql_user="root" # имя пользователя mysql.
mysql_pass="o9djflkzx90k" # пароль пользователя mysql.

db1="params" # имя базы данных1, которую будем сохранять.
db2="joomla" # имя базы данных2, которую будем сохранять.
db3="weewx" # имя базы данных3, которую будем сохранять.

dir1="/media" # папка с файлами, где лежат картинки видеонаблюдения.
dir2="/var/www" # папка со скриптами и веб-сервер.
dir3="/home/pi/.node-red" # папка с данными Node-RED.

 

echo -e "\n" >> $log 2>&1
echo -e "### Start section BACKUP EVERY DAY ###" >> $log 2>&1
starttime=`date +%s`
echo "Time: $(date)" >> $log 2>&1

### Удаляем старый бэкапы старше 7 дней из папки /backup ###
sudo rm /backup/backup-`hostname`-`date '+%Y-%m-%d'.tar.gz -d "$old day ago"` >> $log 2>&1

### Создаем пустой архив .tar, удаляем неполные файлы бэкапов. ###
sudo rm /backup/backup-`hostname`-`date '+%Y-%m-%d'`.tar  >> $log 2>&1
sudo rm /backup/backup-`hostname`-`date '+%Y-%m-%d'`.tar.gz  >> $log 2>&1
sudo tar -cf /backup/backup-`hostname`-`date '+%Y-%m-%d'`.tar -T /dev/null

### Создаем временную директорию для бэкапа MySQL ###
sudo mkdir -p /backup/mysql >> $log 2>&1

### Выполняем дамп баз данны и сохраняем в папку /backup ###
sudo mysqldump -u $mysql_user -p$mysql_pass $db1 --log-error $log > /backup/mysql/$db1-db.sql
sudo mysqldump -u $mysql_user -p$mysql_pass $db2 --log-error $log > /backup/mysql/$db2-db.sql
sudo mysqldump -u $mysql_user -p$mysql_pass $db3 --log-error $log > /backup/mysql/$db3-db.sql

### Добавляем другие директории к архиву tar ###
sudo tar rf /backup/backup-`hostname`-`date '+%Y-%m-%d'`.tar /backup/mysql/
sudo tar rf /backup/backup-`hostname`-`date '+%Y-%m-%d'`.tar $dir1
sudo tar rf /backup/backup-`hostname`-`date '+%Y-%m-%d'`.tar $dir2
sudo tar rf /backup/backup-`hostname`-`date '+%Y-%m-%d'`.tar $dir3

### Сжимаем архив ###
sudo gzip /backup/backup-`hostname`-`date '+%Y-%m-%d'`.tar
echo "Archive size : " >> $log 2>&1
sudo ls -sh backup-`hostname`-`date '+%Y-%m-%d'`.tar.gz >> $log 2>&1

### Удаляем временную папку для MySQL ###
sudo rm -rf /backup/mysql >> $log 2>&1

### Пишем в лог о завершении ###

stoptime=`date +%s`
duration=`expr ${stoptime} - ${starttime}`
echo "Stop time: $(date)" >> $log 2>&1
echo "Duration is `date +%H:%M:%S -ud @${duration}`" >> $log 2>&1

echo -e "### Stop section BACKUP EVERY DAY ###" >> $log 2>&1

 

Сохраняем файл Ctrl+X.

 

1.4. Делаем этот файл исполняемым при помощи команды.

sudo chmod 755 /backup/backup_ed.sh

 

 

1.5.Осталось добавить автозапуск бэкапа ежедневно в 3:30. Для этого выполните команду.

sudo crontab -e

 

 

и вставьте в конец файла следующую строку.

30 3 * * * /backup/backup_ed.sh > /dev/null 2>&1 # Run backup everyday at 3:30

 

 

Сохраните Сtrl+X.

 

Готово. Теперь в нашей директории /backup будет накапливаться архив ежедневного бэкапа. За 7 ночей будет накоплено 7 файлов. 

В моем случае, каждый ежедневный архив занимает от 60 до 100 МБ.

В файле /var/log/backup.log сохраняется информация о ежедневном бэкапе. Конечно, лог будет расти, поэтому его необходимо делать rotate, но об этом в другой раз.

 

 

 

Часть 2. Еженедельный бэкап

Теперь создадим второй файл, который будет запускаться по понедельникам. Он будет сохранять данные на VPNKI Space по протоколу FTP. Для этого.

 

2.1. Запустите Space и активируйте доступ через FTP по этой инструкции. - НЕДОСТУПНО, ИСПОЛЬЗУЙТЕ ДРУГОЙ FTP СЕРВЕР.

 

2.2. Зайдите любым ftp клиентом и создайте на Space директорию с названием /my_backups . В этой директории будут сохраняться ваши файлы резервных копий.

 

2.3. Теперь вернемся к RaspberryPi и поставим утилиту для выгрузки файлов wput (аналог wget). Ее мы будем использовать для передачи файлов по протоколу FTP с докачкой.

sudo apt-get install wput

 


2.4. Создадим в директории /backup новый файл backup_ew.sh . Как напоминание ew - every week, еженедельно.

sudo touch /backup/backup_ew.sh

 

 

2.5. Откроем его в редакторе nano.

sudo nano /backup/backup_ew.sh

Добавим следующий текст, но, по традиции, читаем комментарии к переменным в самом начале файла:

#!/bin/bash
#
# Send backup to VPNKI Space via FTP at 4:00 every Monday
# Stdout and Stderr redirects to log-file
#
# Example run - ./backup_ew.sh
#

### Переменные / Variables ###
log="/var/log/backup.log" # Логфайл.
vpnki_username="aivanov" # Ваше имя VPNKI. (ЛОГИН НА FTP СЕРВЕР).
vpnki_password="$1$90Ikjlkiusori0988777wygew" # Ваш API ключ VPNKI. (ПАРОЛЬ НА FTP СЕРВЕР).
days_to_store="30" # Период в днях хранения резервных копий.

echo -e "\n" >> $log 2>&1
echo -e "### Start section BACKUP EVERY WEEK ###" >> $log 2>&1
starttime=`date +%s` >> $log 2>&1
echo "Start time: $(date)" >> $log 2>&1

cd /backup

### Сохраняем архивированный файл в VPNKI Space ###
today_backup="backup-`hostname`-`date '+%Y-%m-%d'`.tar.gz" >> $log 2>&1
if [ -e $today_backup ]
    then
    sudo wput --basename=/backup/ /backup/$today_backup ftp://$vpnki_username:$Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript./my_backups/ # ИСПОЛЬЗУЙТЕ URL СВОЕГО FTP СЕРВЕРА.
    echo "$today_backup sent into VPNKI Space" >> $log 2>&1

    ### Ищем старые бэкапы старше 30 дней и удаляем их ###
    wget -q --no-remove-listing ftp://$vpnki_username:$Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript./my_backups/ # ИСПОЛЬЗУЙТЕ URL СВОЕГО FTP СЕРВЕРА.

    while read line; do
      if echo "$line" | grep -q backup-`hostname`
        then
          IFS=', ' read -r -a array <<< "$line"
          filename="${array[8]}"

          fullname=$(echo $filename | cut -f 1 -d '.')
          extension1=$(echo $filename | cut -f 2 -d '.')
          extension2=$(echo $filename | cut -f 3 -d '.')

          name=$(echo $fullname | cut -f1 -d-)
          hostname=$(echo $fullname | cut -f2 -d-)
          year=$(echo $fullname | cut -f3 -d-)
          month=$(echo $fullname | cut -f4 -d-)
          day=$(echo $fullname | cut -f5 -d-)

          backup_date=`date -d $year$month$day '+%Y-%m-%d'`
          last_store_date=`date '+%Y-%m-%d' -d "$days_to_store day ago"`

          if [[ $backup_date < $last_store_date ]];
            then
              old_backup=$name-$hostname-$year-$month-$day.$extension1.$extension2
              echo "This backup is old and will be deleted - $old_backup" >> $log 2>&1
              sudo wdel -q ftp://$vpnki_username:$Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript./my_backups/$old_backup >> $log 2>&1
          fi

      fi
    done < /backup/.listing

    ### Удаляем локальные временные файлы ###
    sudo rm /backup/index.* >> $log 2>&1
    sudo rm /backup/.listing >> $log 2>&1

    else
        echo "ERROR: $today_backup not found!!!" >> $log 2>&1
fi
stoptime=`date +%s` >> $log 2>&1
duration=`expr ${stoptime} - ${starttime}` >> $log 2>&1

### Пишем в лог о завершении ###

echo "Stop time: $(date)" >> $log 2>&1
echo "Duration is `date +%H:%M:%S -ud @${duration}`" >> $log 2>&1
echo -e "### Stop section BACKUP EVERY WEEK ###" >> $log 2>&1

Сохраните Ctrl+X.

 

2.6. Делаем этот файл запускающимся при помощи команды.

sudo chmod 755 /backup/backup_ew.sh

 

 

2.7. Осталось добавить автозапуск бэкапа по понедельникам в 4:00. Для этого выполните команду.

sudo crontab -e

 

 

и вставьте в конец файла следующую строку.

0 4 * * 1 /backup/backup_ew.sh > /dev/null 2>&1 # Run backup every monday at 4:00

Сохраните Ctrl+X.

 

Вот собственно и все. Теперь у вас есть бэкапы глубиной в 7 дней на локальном USB устройстве. А на удаленном FTP сервере хранятся еще 4 бэкапа глубиной в месяц.

Остались три вопроса, о которых будет в следующий раз.

  • как смонтрировать USB флэшку.
  • как восстанавливаться из бэкапа.
  • как сделать ротацию файла лога обоих скриптов /var/log/backup.log.

 

Если что-то не получилось или что-то неверно описано, то задавайте вопросы на форуме https://vpnki.ru/questions/support-forum/blog-news.

 

 

 


Рекомендации по выбору тарифа

Если вы не планируете передачу видео трафика, то мы рекомендуем вам начинать с выбора тарифа PLAN-MYDEV. Если передача видео будет осуществляться, то стоит сразу начинать с PLAN-VIDEO. Если скорости хватать не будет, то в любое время вы можете изменить тариф на более скоростной.

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

Контролировать объем переданного трафика вы можете на странице с графиками использования.

Узнать реальную скорость своего VPN соединения вы можете утилитой iperf3 на странице "Инструменты". Стоит отметить, что вопрос скорости передачи полезных данных будет зависеть от трех факторов:

  • от типа используемого протокола VPN;
  • типа транспортного протокола - TCP или UDP;
  • физической удаленности вашего устройства от нашего сервера.

Худшим вариантом по скорости окажется вариант, когда в качестве транспортного протокола для VPN соединения используется TCP. При этом ваше устройство размещено далеко от сервера VPNKI. В этом случае, реальная скорость передачи данных будет определяться необходимостью подтверждения передачи каждого пакета в протоколе TCP.


 

ДОПОЛНИТЕЛЬНО ПО ТЕМЕ КОНФИГУРАЦИИ УДАЛЕННОГО ДОСТУПА

Кроме настройки по этой инструкции вам могут пригодиться другие примеры конфигурации и использования системы.

  • Рабочий стол через RDP и OpenVPN. Ссылка здесь.
  • Выставить FTP сервер через проброс TCP порта. Ссылка здесь.

 

ОБЩАЯ ИНФОРМАЦИЯ О БЛИЗКИХ ТЕМАХ

По ссылкам ниже вы можете ознакомиться с информацией, связанной с темой VPN соединений.

  • Про удалённый доступ к компьютеру можно. Можно почитать на нашем сайте.
  • Про VPN и протоколы можно почитать здесь.