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

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

MySQL 8

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

Ссылки

Customizing the PATH for MySQL Tools

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

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

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

Функции

  • С помощью mysqldump делает резервные копии всех баз данных mysql на сервере.
  • Каждый бэкап сохраняется в отдельную подпапку вида DD.MM.YYYY_hhmmmss.
  • С помощью 7-Zip архивирует резервные копии.
  • Удаляет старые резервные копии.

Код

@echo off
SetLocal EnableDelayedExpansion

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

set user=root
set pass=your_password_is_here
set prot=tcp
set port=3306
set host=localhost
set BackupDir=D:\MySQL\
set NumFolders=10

rem =============================
rem ======== 7-Zip path =========
rem =============================

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

rem =============================
rem == create backup directory == 
rem ==== DD.MM.YYYY_hhmmmss =====
rem =============================

set h=%time:~0,2%
set h=%h: =0%
set FullBackupDir=%BackupDir%%date%_%h%%time:~3,2%%time:~6,2%\
md %FullBackupDir%

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" > %FullBackupDir%%%a.sql 2>nul
	rem === zip ====
	"%a7z%" a -tzip -bb0 -bd -sdel "%FullBackupDir%%%a.zip" "%FullBackupDir%%%a.sql" 2>nul >nul
 ) 

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

for /f "tokens=* delims=" %%D in ('dir %BackupDir% /ad /b /o-d') do (
	if not %%D=="" (
		if not !NumFolders!==0 (
			set /a NumFolders-=1
		) else (
			rd /s /q %BackupDir%%%D 2>nul >nul
		)
	)
)
  • user - логин в MySQL
  • pass - пароль
  • prot - протокол
  • port - порт
  • host - сервер
  • BackupDir - папка куда бэкапить
  • NumFolders - сколько подпапок с бэкапами хранить
  • a7z - путь к 7z.exe

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

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

bat

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

bat

В триггерах настраиваем расписание. У меня резервное копирование происходит каждые 6 часов.

bat

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

bat

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

bat

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

Теперь все наши MySQL базы будут резервироваться каждые 6 часов - это 4 раза в день. С настройкой NumFolders=10 в BAT файле мы будем хранить данные за последние 2,5 дня. Если вы хотите с таким расписанием хранить резервные копии баз данных 10 дней, то измените: NumFolders=40.

Если хотите хранить ежедневные и ежемесячные резервные копии - сделайте два BAT файла и два расписания резервного копирования в разные папки.

Теги