Перейти к основному содержанию

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

MySQL 8

Накидал маленький 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

win

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

win

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

win

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

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

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

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

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

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

win

Добавить.

win

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

win

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

win

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

win

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

Код

@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, не храните там что-то ещё!

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

win

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

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

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

win

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

win

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

win

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

win

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

win

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

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

Теги

 

Похожие материалы

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

Я решил немного усилить безопасность и добавить автоматическое еженедельное резервное копирование папки в Облако Mail.Ru.

Теги

Drupal — размещение блока в произвольном месте статьи

Многие владельцы сайтов сталкиваются с необходимостью размещения дополнительных блоков в своих статьях. Это может быть рекламный блок или какое-то объявление. Или просто какое-то декоративное праздничное оформление сайта.

Теги