Авторизация

РЕЗЕРВНОЕ КОПИРОВАНИЕ RASPBERRY PI С VPNKI SPACE

Рейтинг:  4 / 5

Звезда активнаЗвезда активнаЗвезда активнаЗвезда активнаЗвезда не активна
 

 

Часть 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, но об этом в другой раз.