::::::::::::::::::::::::::::::::::::::::::::::::::: :: :: MySQL Baker 4 Windows :: :: DATABASES=以空格分隔的库名或 --all-databases :: ::::::::::::::::::::::::::::::::::::::::::::::::::: @echo off setlocal enabledelayedexpansion for /f "tokens=1-3 delims=-/ " %%1 in ("%date%") do set DATE_STR=%%1%%2%%3 set FILE_DATE=%DATE_STR: =0% set FILE_PWD=123456 REM set DATABASES=mysql sys set DATABASES=--all-databases set DB_HOST=localhost set DB_PORT=3306 set DB_USER=root set DB_PWD=123456 set P7ZIP=C:\Program Files\7-Zip\7z.exe set MYSQL_DIR=C:\Program Files\mysql-8.0.20 set LOG_FILE=baker_%FILE_DATE%.log echo [%date:~0,10% %time%] start >> %LOG_FILE% :: 检测 mysql 帐号是否可用 "%MYSQL_DIR%\bin\mysqlshow.exe" -u %DB_USER% --password=%DB_PWD% if not "0"=="%errorlevel%" ( echo [%date:~0,10% %time%] [error] db_pwd or db_user invalid. >> %LOG_FILE% goto ERROR ) else ( echo [%date:~0,10% %time%] account valid. >> %LOG_FILE% ) :: 导出数据库 if "%DATABASES%"=="--all-databases" ( set SQL_FILE=all_%FILE_DATE%.sql set SQL_FILES=!SQL_FILE! "%MYSQL_DIR%\bin\mysqldump.exe" -h%DB_HOST% -P%DB_PORT% -u%DB_USER% -p%DB_PWD% --routines --single-transaction %DATABASES% --log-error=%LOG_FILE% > !SQL_FILE! if not "0"=="!errorlevel!" ( echo [%date:~0,10% %time%] [error] dump failed: [%DATABASES%] >> %LOG_FILE% del /q !SQL_FILES! goto ERROR ) else ( echo [%date:~0,10% %time%] dumped: [%DATABASES%] >> %LOG_FILE% ) ) else ( set SQL_FILES= for %%D in (%DATABASES%) do ( "%MYSQL_DIR%\bin\mysqldump.exe" -h%DB_HOST% -P%DB_PORT% -u%DB_USER% -p%DB_PWD% --routines --single-transaction %%D --log-error=%LOG_FILE% > db_%%D_%FILE_DATE%.sql if not "0"=="!errorlevel!" ( echo [%date:~0,10% %time%] [error] dump failed: [%%D] >> %LOG_FILE% del /q db_%%D_%FILE_DATE%.sql goto ERROR ) else ( set SQL_FILES=!SQL_FILES! db_%%D_%FILE_DATE%.sql echo [%date:~0,10% %time%] dumped: [%%D] >> %LOG_FILE% ) ) ) ::"%MYSQL_DIR%\bin\mysqldump.exe" -h%DB_HOST% -P%DB_PORT% -u%DB_USER% -p%DB_PWD% --routines --single-transaction --all-databases > DB_%FILE_DATE%.sql ::"%MYSQL_DIR%\bin\mysqldump.exe" -h%DB_HOST% -P%DB_PORT% -u%DB_USER% -p%DB_PWD% --routines --single-transaction --databases db1 db2 db3 > DB_%FILE_DATE%.sql ::"%MYSQL_DIR%\bin\mysqldump.exe" -h%DB_HOST% -P%DB_PORT% -u%DB_USER% -p%DB_PWD% --routines --single-transaction db1 > DB_%FILE_DATE%.sql :: 压缩导出的 SQL 文件 :COMPRESS set BAK_NAME=db_%DATABASES: =_%_%FILE_DATE%.7z "%P7ZIP%" a -p%FILE_PWD% %BAK_NAME% %SQL_FILES% if not "0"=="%errorlevel%" ( echo [%date:~0,10% %time%] [error] sql compressed failed: [%SQL_FILES%] >> %LOG_FILE% goto ERROR ) else ( echo [%date:~0,10% %time%] db file compressed: [%BAK_NAME%]. >> %LOG_FILE% del /q %SQL_FILES% ) goto END :: 设置导出状态 :ERROR set SUCCESSED=failed :END if not "%SUCCESSED%"=="failed" set SUCCESSED=success echo [%date:~0,10% %time%] done[%SUCCESSED%]. >> %LOG_FILE% echo. >> %LOG_FILE%