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/
замініть шляхом до скрипту. Якщо тест виявився успішним, значить, Вами все було налаштовано правильно. Якщо ж бажаного результату не було досягнуто – зверніться до нашої Служби підтримки надавши максимум інформації, включаючи вміст Ваших скриптів.