Создать резервные копии баз данных MySql для Windows и удалить устаревшие архивы

Aug 12, 2014 17:31

Ниже приведенный скрипт предназначен для автоматического создания резервных копий БД 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

веб-разработка, mysql, решение, программирование, windows, работа

Previous post Next post
Up