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