6.3.7 Автоматичне резервне копіювання

Існує необхідність створювати резервну копію директорії згідно з графіком та зберігати її на зовнішньому сховищі?
Це можна просто виконати використовуючи KeepData у якості віддаленого хмарного сховища. Більш того, такий процес можна повністю автоматизувати.
Рішення відрізняється залежно від ОС, але загальний алгоритм полягає у запуску виконуваного файлу за розкладом. Давайте розберемо на прикладах.
Створення бекапів в Windows
У ОС Windows подібне реалізується за допомогою файлу у форматі .bat і планувальника завдань Windows.
Розглянемо покрокову інструкцію:
1. Для коректного виконання майбутнього .bat-файлу, нам знадобиться завантажити та встановити програму WinSCP. Зробити це можна на їх офіційному сайті. Виконувати будь-які дії у самій програмі при цьому не знадобиться.
2. Створіть новий текстовий файл у будь-якій зручній локації. Це буде наш новий скрипт для резервного копіювання.
3. Найважливіший крок - наповнення скрипта. Нижче наведено приклад з поясненнями. Виділені змінні необхідно заповнити Вашою інформацією:
@echo off
"C:\Program Files (x86)\WinSCP\WinSCP.exe" ^
/ini=nul ^
/command ^
"open ftp://login:password@server.keepdata.thehost.ua/" ^
"lcd C:\Folder\Work" ^
"cd /backups-work/" ^
"mkdir %%TIMESTAMP#yyyy-mm-dd%%" ^
"cd /backups-work/%%TIMESTAMP#yyyy-mm-dd%%" ^
"put File1" ^
"lcd C:\" ^
"put Folder2" ^
"lcd C:\Users\User" ^
"put File3" ^
"exit"
set WINSCP_RESULT=%ERRORLEVEL%
if %WINSCP_RESULT% equ 0 (
echo Success
) else (
echo Error
)
exit /b %WINSCP_RESULT%
Тепер, до пояснень:
C:\Program Files (x86)\WinSCP\WinSCP.exe" ^– вкажіть шлях до `.exe’ файлу WinSCP. У прикладі вказано шлях при стандартній установці."open ftp://login:password@server.keepdata.thehost.ua/" ^– цей рядок виконує підключення до Вашого Хмарного сховища. Тут необхідно вказати логін, пароль та сервер підключення. Всі ці дані Ви можете дізнатися в Листі про відкриття послуги."lcd C:\Folder\Work" ^– ця команда переходить виділеним шляхом на локальному ПК.cd /backups-work/" ^– ця команда переходить по виділеному шляху на Вашому Хмарному сховищі."mkdir %% TIMESTAMP # yyyy-mm-dd%%" ^– створює директорію в KeepData з назвою у форматірік-місяць-день.cd /backups-work/%%TIMESTAMP#yyyy-mm-dd%%" ^– переходить до вказаної директорії."put File1" ^– завантажує в цю директорію файлFile1з поточного розташування на локальному ПК (D:\Folder\Workу цьому прикладі)."lcd C:\" ^– переходить новим шляхом на локальному ПК.put Folder2" ^– завантажує директоріюFolder2та весь її зміст з нового шляху на Хмарне сховище."lcd C:\Users\User" ^– переходить новим шляхом на локальному ПК.put File3" ^– завантажує файлFile3з нового шляху на Хмарне сховище.
Важливо: у Windows для поділу директорій використовується символ \, у Linux ж - /. Хмарне сховище збудовано саме на архітектурі Linux. Врахуйте це при редагуванні скрипту користувача
Таким чином, ми отримали скрипт, який підключається до KeepData, створює в зазначеній директорії нову папку і завантажує три файли з різних місць на локальному ПК. Створена папка матиме ім’я аналогічне часу її створення, що полегшить подальшу роботу з наявними резервними копіями. За потреби, вказаний скрипт можна відредагувати під Ваші потреби.
4. Зберігаємо наш текстовий файл у форматі .bat. Для цього потрібно у файловому редакторі замість Зберегти натиснути Зберегти як. При збереженні вибираємо Всі файли і вказуємо повне ім’я файлу, разом із форматом .bat наприкінці:

Тепер ми маємо написаний скрипт, який виконує резервне копіювання. Як цей процес автоматизувати? У цьому нам допоможе Планувальник задач Windows.
5. Відкриваємо Планувальник завдань за допомогою меню Пуск або альтернативним способом - натиснувши Win + R та виконавши taskschd.msc:

6. Правим кліком миші по Бібліотека планувальника завдань відкриваємо контектне меню та натискаємо Створити завдання:

7. Переходимо в підменю Тригери і натискаємо Створити. У відкритій формі вказуємо за яким розкладом необхідно виконувати завдання. Наприклад, щодня о 12:00:

8. Аналогічно переходимо в підменю Дії і знову натискаємо Створити. У відкритій формі вибираємо Запуск програми та вказуємо шлях до нашого скрипту, вручну або за допомогою кнопки Огляд:

Порада: у підменю Умови та Параметри можна додатково налаштувати Ваше завдання, наприклад, дозволити їй запускатися тільки при підключенні до певної мережі.
9. Завдання створено. Воно буде виконуватись згідно з вказаним розкладом. Вкрай бажано відразу ж протестувати його виконання за допомогою ручного запуску - клікнувши на завдання правою кнопкою миші і натиснувши Виконати. У разі, якщо тестове виконання закінчилося безуспішно - зверніться до нашої Служби підтримки надавши максимум інформації, включаючи текст Вашого скрипту.
Створення бекапів в Linux
У Linux процес аналогічний, з поправкою на інструментарій та залежності ОС. Також скриптів для виконання бекапу буде два – для безпосередньо файлів і для баз даних.
Залежністю до роботи виконуваного файлу створення бекапу в Linux є консольний FTP-клієнт LFTP.
Давайте розглянемо інструкцію з налаштування за допомогою покрокового прикладу:
1. Встановіть LFTP.
- Встановити в Ubuntu/Debian можна так:
sudo apt update
sudo apt install lftp
- У CentOS/AlmaLinux/RockyLinux:
sudo yum install lftp
2. У Linux нам знадобиться два скрипти - для резервування певних директорій та для резервування певних баз даних. У нашому прикладі вони називаються backup-dir.sh та backup-mysql.sh, їх створені присвячені кроки 3 та 4 цієї інструкції. Якщо Вам необхідний лише один - створюйте лише один. Створення майбутніх виконуваних файлів у форматі .sh у потрібній директорії виконується так:
touch backup-dir.sh
touch backup-mysql.sh
3. Почнемо зі скрипта який резервує файли потрібної директорії, у цьому прикладі він зветься backup-dir.sh. Відкриємо його будь-яким текстовим редаткором, наприклад, за допомогою nano backup-dir.sh. Нижче наведено приклад скрипта з поясненнями. Виділені змінні необхідно заповнити Вашою інформацією:
#!/bin/bash
echo "Directory Backuper by TheHost"
#Визначення змінних та параметрів доступу до FTP-сервера
TMP_PATH="/tmp"
BACKUP_DIRS="/home/user/data /home/user/data2 /home/user/data3"
FTP_HOST="ftp://server.keepdata.thehost.ua"
FTP_USER="ftp_user"
FTP_PASS="ftp_password"
#Створення нової резервної копії локально, у тимчасовій директорії
DATE=`date +%Y-%m-%d`
DATE_TIME=`date +%Y-%m-%d-%H-%M-%S`
mkdir -p "$TMP_PATH/DIR_BACKUP-$DATE"
cd $TMP_PATH/DIR_BACKUP-$DATE
GZIPFILE="backup-$DATE_TIME.tgz"
echo -n "Creating archive $GZIPFILE... "
tar -czf $GZIPFILE $BACKUP_DIRS && echo "OK" || echo -e "Failed!\a"
#Завантаження створеного архіву на FTP-сховище
echo -n "Checking $FTP_HOST for today's archive... "
if [[ -z "`lftp -u $FTP_USER,$FTP_PASS -e "cd $DATE && renlist backup-$DATE-*.tgz; bye" $FTP_HOST 2>/dev/null`" ]]; then
echo "not found"
echo "Uploading archive to $FTP_HOST"
lftp -u $FTP_USER,$FTP_PASS -e "cd $DATE || mkdir $DATE; cd /$DATE && put $GZIPFILE; bye" $FTP_HOST >/dev/null 2>&1;
else
echo "already exist!";
fi
#Видалення тимчасової директорії
cd $TMP_PATH
rm -rf $TMP_PATH/DIR_BACKUP-$DATE
echo "Done."
exit 0
Незважаючи на громіздкий вид скрипту, модифікувати в ньому потрібно зовсім небагато. А саме:
TMP_PATH="/tmp"– встановлює тимчасову директорію для зберігання створеної резервної копії перед її завантаженням на віддалений сервер. Можна залишити стандартне значення/tmp.BACKUP_DIRS="/home/user/data /home/user/data2 /home/user/data3"– які саме директорії будуть резервуватися до архіву. Можна вказати одну.FTP_HOST="ftp://server.keepdata.thehost.ua"– адреса Вашого Хмарного сховища.FTP_USER="ftp_user"– FTP-користувач Вашого Хмарного сховища.FTP_PASS="ftp_password"– пароль FTP-користувача Вашого Хмарного сховища.
Такий скрипт буде при запуску створювати архів у форматі .tgz директорій зазначених у BACKUP_DIRS=, зберігати їх у TMP_PATH= локально і потім намагатися завантажити архів на віддалене FTP-сховище, в ньому створену директорію з назвою у вигляді поточної дати. У разі успішного виконання він видалить локальну копію архіву. Після редагування скрипта збережіть файл, обов’язково у форматі .sh.
4. Тепер редагуємо скрипт для баз даних, у нас у прикладі це backup-mysql.sh. Відкриємо його будь-яким текстовим редаткором, наприклад, за допомогою nano backup-mysql.sh. Нижче наведено приклад скрипта з поясненнями. Виділені змінні необхідно заповнити Вашою інформацією:
#!/bin/bash
echo "Database Backuper by TheHost"
#Визначення змінних та параметрів доступу
DATABASES='database1 database2 database3'
TMP_PATH="/tmp"
BACKUP_USER="mysql_user"
BACKUP_PASS="mysql_password"
FTP_HOST="ftp://server.keepdata.thehost.ua"
FTP_USER="ftp_user"
FTP_PASS="ftp_password"
#Створення нового бекапу
DATE=`date +%Y-%m-%d`
DATE_TIME=`date +%Y-%m-%d-%H-%M-%S`
mkdir -p "$TMP_PATH/DB_BACKUP-$DATE"
cd $TMP_PATH/DB_BACKUP-$DATE
for DB in $DATABASES; do
echo -n "Dumping $DB... "
mysqldump -E -R -u"$BACKUP_USER" -p"$BACKUP_PASS" $DB > noc-$DATE_TIME.$DB.sql && echo "OK" || echo -e "Failed!\a"
done
GZIPDB="backup-$DATE_TIME.tgz"
echo -n "Creating archive $GZIPDB... "
tar -czf $GZIPDB --remove-files backup-$DATE_TIME.*.sql && echo "OK" || echo -e "Failed!\a"
#Завантаження бекапу на віддалений сервер
echo -n "Checking $FTP_HOST for today's archive... "
if [[ -z "`lftp -u $FTP_USER,$FTP_PASS -e "cd $DATE && renlist backup-$DATE-*.tgz; bye" $FTP_HOST 2>/dev/null`" ]]; then
echo "not found"
echo "Uploading archive to $FTP_HOST"
lftp -u $FTP_USER,$FTP_PASS -e "cd $DATE || mkdir $DATE; cd /$DATE && put $GZIPDB; bye" $FTP_HOST >/dev/null 2>&1;
else
echo "already exist!";
fi
#Видалення тимчасової директорії
cd $TMP_PATH
rm -rf $TMP_PATH/DB_BACKUP-$DATE
echo "Done."
exit 0
Пояснення:
DATABASES='database1 database2 database3– список баз даних, які зачіпатимуть завдання. Вказувати через пробіл.TMP_PATH="/tmp"– встановлює тимчасову директорію для зберігання створеної резервної копії перед її завантаженням на віддалений сервер. Можна залишити стандартне значення/tmp.BACKUP_USER="mysql_user"– користувач для входу в MySQL.BACKUP_PASS="mysql_password"– пароль вказаного користувача.FTP_HOST="ftp://server.keepdata.thehost.ua"– адреса Вашого Хмарного сховища.FTP_USER="ftp_user"– FTP-користувач Вашого Хмарного сховища.FTP_PASS="ftp_password"– пароль FTP-користувача Вашого Хмарного сховища.
Такий скрипт буде при запуску створювати дампи баз даних DATABASES= і стискати їх в архів у форматі .tgz, зберігати його в TMP_PATH= локально і потім намагатися завантажити його на віддалене FTP-сховище, в ньому створену директорію з назвою у вигляді поточної дати. У разі успішного виконання він видалить локальну копію архіву. Після редагування скрипта збережіть файл, обов’язково у форматі .sh.
5. Надайте скриптам права на виконання:
chmod +x /path/to/backup-dir.sh
chmod +x /path/to/backup-mysql.sh
Де /path/to/ замініть шляхами до створених скриптів.
6. Скрипти створені, залишилося автоматизувати їх виконання. Для цього ми використовуємо CRON-завдання.
Відкрийте файл crontab за допомогою команди:
crontab -e
Додайте нові завдання для виконання Ваших скриптів. Наприклад:
30 3 * * * /path/to/backup-dir.sh
30 3 * * * /path/to/backup-mysql.sh
Замініть /path/to/ шляхами до створених скриптів, після чого збережіть файл. Надані приклади виконуватимуться щодня о 3:30 ночі.
Порада: ознайомитися з можливостями CRON для налаштування завдань можна у відповідній інструкції.
7. Готово! Скрипти створені та відредаговані з Вашими даними, CRON-завдання на їх виконання вже чекає на потрібну дату. Радимо також виконати мануальний скрипт для тестування. Це можна зробити наступною командою:
./path/to/backup-dir.sh
Де /path/to/ замініть шляхом до скрипту. Якщо тест виявився успішним, значить, Вами все було налаштовано правильно. Якщо ж бажаного результату не було досягнуто – зверніться до нашої Служби підтримки надавши максимум інформації, включаючи вміст Ваших скриптів.


