Найти тему

BAT скрипт для резервного копирования MySQL в Облако Mail.Ru

Оглавление

Накидал маленький BAT скрипт для резервного копирование MySQL баз в Облако Mail.Ru по протоколу WebDAV. Внесите свои данные и через scheduler и настройте расписание резервного копирования.

Ссылки

Customizing the PATH for MySQL Tools

Установка MySQL 8 на Windows Server 2016

Mysql 8 — mysqldump в командной строке

7-Zip — бесплатный архиватор

MySQL 8 — резервное копирование BAT файлом

BAT скрипт для резервного копирования папки в Облако Mail.Ru

Подключаем Облако Mail.Ru через WebDAV с помощью командной строки

Функции

  • Монтирует облачный диск в качестве обычного локального диска по протоколу WebDAV.
  • С помощью mysqldump делает резервные копии всех баз данных mysql на сервере во временную папку.
  • С помощью 7-Zip архивирует резервные копии в облако, разбивая архив на файлы по 2 ГБ.
  • Каждый бэкап сохраняется в отдельную подпапку вида YYYY-MM-DD-hhmmss.
  • Удаляет старые резервные копии из облака.
  • Демонтирует облачный диск.

Для того, чтобы скрипт заработал, нужно выполнить подготовительные работы. Нужно установить архиватор и настроить работу WebDAV. Ещё нужно добавить пути к mysqldump.exe в серверные переменные, но это уж сами разберитесь, ссылки выше есть, или пропишите полный путь в скрипте.

Подключаем Облако Mail.Ru через WebDAV с помощью командной строки

7-Zip

7-Zip - бесплатный архиватор

Архиватор позволит загружать бэкап в облако в виде архива, тем самым экономя место в облаке. Одновременно с этим архиватор разобьёт архив на файлы по 2 ГБ, по протоколу WebDAV всё равно не получится загрузить файл больше 4 ГБ, по крайней мере в Облако mail.ru.

Подготовка служб

Сперва нужно проверить, работает ли у вас служба Веб-клиент (WebClient).

services.msc
-2

Находим её в списке служб.

-3

Служба Веб-клиент (WebClient) по умолчанию остановлена и находится в ручном режиме.

-4

Меняем тип запуска на автоматический, и запускаем службу.

Если вы работаете на сервере, то служба Веб-клиент (WebClient) по умолчанию в серверных операционных системах Windows не установлена. Устанавливаем и запускаем:

Установка WebDAV клиента на Windows Server 2016

Генерируем пароль приложения

Для того, чтобы подключиться к облаку через WebDAV, нужно сгенерировать специальный пароль. По сути, мы будем неким сторонним приложением, которому нужно дойти в облако. Логинимся в браузере в свой ящик mail.ru и переходим на страницу:

https://account.mail.ru/user/2-step-auth/passwords/

-5

Добавить.

-6

Придумываем название для приложения. Продолжить.

-7

Пишем пароль от ящика, ставим галку, что мы не верблюд. Продолжить.

-8

Пароль сгенерирован, копируем его, он нам пригодится. Пароль выглядит как-то так: FKh63KgDL4JgDLWJjdJ2.

-9

Таких паролей можно сгенерировать сколько угодно, и удалить потом, когда надобность в них отпадёт.

Код

@echo off
SetLocal EnableDelayedExpansion

rem =============================
rem ====== admin variables ======
rem =============================

set CloudURL=https://webdav.cloud.mail.ru/
set CloudPassword=FKh63KgDL4JgDLWJjdJ2
set CloudUser=example@mail.ru
set LocalDriveLetter=O
set user=root
set pass=your_password_is_here
set prot=tcp
set port=3306 set host=localhost
set TempDir=C:\Windows\Temp\MysqlWeeklyBackup\
set BackupDir=%LocalDriveLetter%:\backup\DB\
set NumFolders=2
rem =============================
rem ======== 7-Zip path =========
rem =============================

set a7z=%ProgramFiles%\7-Zip\7z.exe

rem =============================
rem ======== open cloud =========
rem =============================

net use %LocalDriveLetter%: %CloudURL% %CloudPassword% /user:%CloudUser% 2>nul >nul

rem =============================
rem == create backup directory ==
rem ==== YYYY-MM-DD-hhmmss ======
rem =============================

set h=%time:~0,2%
set h=%h: =0%
set BackupPath=%date:~6,4%-%date:~3,2%-%date:~0,2%-%h%%time:~3,2%%time:~6,2%\
set FullBackupDir=%BackupDir%%BackupPath%
set FullTempDir=%TempDir%%BackupPath%
md %FullBackupDir%
md %FullTempDir%

rem =============================
rem === backup all databases ====
rem =============================

for /F "delims=|" %%a in ('mysql -u%user% -P%port% -h%host% -p%pass% -s --execute="show databases;"') do (
rem === backup database ====
mysqldump.exe ^
--user=%user% ^
--host=%host% ^
--protocol=%prot% ^
--port=%port% ^
--password=%pass% ^
--default-character-set=utf8 ^
--single-transaction=TRUE ^
--routines ^
--events ^
--add-drop-table ^
--add-locks ^
--extended-insert ^
--lock-tables ^
--dump-date ^
--disable-keys ^
--tz-utc ^
"%%a" > %FullTempDir%%%a.sql 2>nul
rem === zip ====
"%a7z%" a -tzip -bb0 -bd -v2g "%FullBackupDir%%%a.zip" "%FullTempDir%%%a.sql" 2>nul >nul
)

rem =============================
rem ==== remove old folders =====
rem =============================

rd /s /q %FullTempDir% 2>nul >nul

for /f "tokens=* delims=" %%D in ('dir %BackupDir% /ad /b /o-n') do (
if not %%D=="" (
if not !NumFolders!==0 (
set /a NumFolders-=1 ) else (
rd /s /q %BackupDir%%%D 2>nul >nul
)
)
)
rem =============================
rem ======= close cloud =========
rem =============================

net use %LocalDriveLetter%: /delete /y 2>nul >nul
  • CloudURL — ссылка для подключения к облаку по WebDAV, для Облака mail.ru это https://webdav.cloud.mail.ru/
  • CloudPassword — сгенерированный нами ранее пароль для приложения, который используется при подключении WebDAV
  • CloudUser — наш ящик mail.ru, который используется в качестве имени пользователя WebDAV
  • LocalDriveLetter — имя локального диска, под которым подключаем облачный диск, я подключаю как O:\
  • TempDir — директория для временных файлов SQL, перед их архивированием, я использую C:\Windows\Temp\MysqlWeeklyBackup\
  • BackupDir — куда бэкапим, я бэкаплю в смонтированный облачный диск по пути O:\backup\DB\
  • NumFolders — сколько папок с бэкапами хранить, я буду хранить две папки
  • user — логин в MySQL
  • pass — пароль в MySQL
  • prot — протокол MySQL
  • port — порт MySQL
  • host — сервер MySQL
  • BackupDir — папка куда бэкапить
  • NumFolders — сколько папок с бэкапами хранить
  • a7z — путь к 7z.exe
  • -v2g — архив разбивается на части по 2 Гб, можно задать свой размер

При желании скрипт можно модифицировать для подключения к любому источнику WEBDAV.

Есть несколько моментов, которые следует иметь в виду:

Сначала мы делаем бэкап, а затем удаляем старый. Соответственно, в облаке должно быть место для NumFolders+1 бэкапов.
Протокол WebDAV не передаёт дату создания папки, поэтому для определения старых (на удаление) папок используется само название папки в виде YYYY-MM-DD-hhmmss. Скрипт сортирует папки по имени в обратном порядке и пропускает первые NumFolders штук, остальные удаляет. В общем, не меняйте название.
Название папки генерируется из текущей даты формата DD.MM.YYYY и времени чч:мм:сс,сс, если ваш Windows использует другой формат данных, то вам нужно модифицировать скрипт для формирования корректного названия папки.
Скрипт удаляет всё что лежит в BackupDir, не храните там что-то ещё!

Проверим как работает скрипт, запустим его несколько раз.

-10

Скрипт работает.

Пример настройки расписания

В Task Scheduler настраиваем новое задание.

-11

Выбираем пользователя, от имени которого будет выполняться резервное копирование. После сохранения задания нас спросят пароль от него. Ставим галку Run whether user is logged or not — запускать даже если юзер не залогинен.

-12

В триггерах настраиваем расписание. У меня резервное копирование происходит раз в неделю по воскресеньям в 10:00.

-13

Указываем ссылку на наш BAT файл.

-14

Настраиваем условия.

-15

Проверяем настройки. OK.

Теперь все наши MySQL базы будут резервироваться раз в неделю. С настройкой NumFolders=2 в BAT файле мы будем хранить два последних бэкапа.

Источник:
https://internet-lab.ru/bat_folder_backup_cloud

💰 Поддержать проект

Если вам понравилась статья, то ставьте 👍🏻 каналу.
Пишите комментарии, задавайте вопросы, подписывайтесь.