Ниже приведенный скрипт предназначен для автоматического создания резервных копий БД mysql в Windows.
Этот скрипт можно запускать из планировщика заданий, тогда все резервные копии для всех баз будут создаваться по расписанию.
- Служебная БД performance_schema пропускается.
- Архивирование выполняет бесплатный 7zip. Исправьте путь к нему.
- Ошибки дампа смотри в файле %BackupDir%\dumperrors.txt
- По-умолчанию скрипт удаляет архивы старше 30 дней, можете изменить в переменной KeepOldFilesDays.
- Файлы имеются текущей датой независимо от локали системы (имя будет, например, 2014-Aug-12T17-22-27_mysql.sql.gzip)
- Формат архива можно установить из поддерживаемых 7zip, по-умолчанию gzip.
- Для просмотра лога работы при запуске скрипта из планировщика Windows укажите параметр программа для запуска mysql-backup.bat > mysql-backup.log и рабочую папку - в нее будет записываться лог.
Скрипт можно копировать и изменять без ограничений.
:: MySQL Backup For Windows (mysql-backup.bat)
@echo off
echo --
echo -- BACKUP MYSQL DATABASES SCRIPT
echo --
:: Note: Do not insert spaces before the equals "=" sign or variable won't set
:: Name of the database user with backup privileges
set DbUser=backup-admin
:: Password for the database user
set DbPassword=password
:: NOTE: DO NOT ADD LAST SLASH "\" TO DIR PATH
:: Backup dir path
set BackupDir=r:\mysql-backup
:: Error log path to find debug info
set DumpErrorLogFile=%BackupDir%\dumperrors.txt
:: MySQL EXE Path
set MysqlDumpTool=c:\Program Files\MySQL\MySQL Server 5.6\bin\mysqldump.exe
:: Path to data folder which may differ from install dir
set MysqlDataDir=c:\ProgramData\MySQL\MySQL Server 5.6\data
:: Path to zip executable
set archiver=c:\Program Files\7-Zip\7z.exe
set ArchiveType=gzip
:: Number of days to retain .zip backup files
set KeepOldFilesDays=30
rem GET CURRENT DATE
echo.>"%TEMP%\~.ddf"
makecab /D RptFileName="%TEMP%\~.rpt" /D InfFileName="%TEMP%\~.inf" -f "%TEMP%\~.ddf" >nul
for /f "tokens=4,5,6,7" %%a in ('type "%TEMP%\~.rpt"') do ^
if not defined current_date (
set "current_date=%%d-%%a-%%b"
set "current_time=%%c"
)
rem remove colons : in a time string
set current_time=%current_time::=-%
rem echo DATE: %current_date%
rem echo TIME: %current_time%
set backuptime=%current_date%T%current_time%
del /q "%TEMP%\~.*"
echo Backup date %backuptime%
:: Switch to the data directory to enumerate the folders
pushd "%MysqlDataDir%"
echo Dump databases to .sql files
FOR /D %%F IN (*) DO (
IF NOT [%%F]==[performance_schema] (
SET %%F=!%%F:@002d=-!
"%MysqlDumpTool%" --user=%DbUser% --password=%DbPassword% --databases --routines -c -n --log-error="%DumpErrorLogFile%" %%F > "%BackupDir%\%backuptime%_%%F.sql"
IF %ERRORLEVEL% neq 0 (
echo # Can not dump DB [%%F]
) ELSE (
echo - Created dump for [%%F]
)
) ELSE (
echo Skip backup for DB [performance_schema]
)
)
echo Archive created sqldump files
popd
pushd "%BackupDir%"
echo %cd%
for /r %%i in (*.sql) do (
echo Archiving %%~ni
"%archiver%" a -t%ArchiveType% "%BackupDir%\%%~ni.sql.%ArchiveType%" "%BackupDir%\%%~ni.sql"
if %ERRORLEVEL% equ 0 (
echo - Compressed %%~ni.sql
) else (
echo # Can not archive %%~ni
)
del /q "%BackupDir%\%%~ni.sql" > nul
)
echo Delete %ArchiveType% files older than %KeepOldFilesDays% days
Forfiles /P "%BackupDir%" /S /M *.* /D -%KeepOldFilesDays% /C "cmd /c del @path" > nul
if %ERRORLEVEL% neq 0 echo No old files deleted
echo - Done
::return to the main script dir at the end
popd