现有一台 Win7 系统,数据库需要做个备份、同步功能。
下面是备份脚本,对路径进行配置:
(–all-databases 为备份所有数据库,如果只是部分,则使用 –-databases db1 db2)
@echo off :: MySQL备份批处理脚本 - 只保留最近5份备份 :: 设置变量 set MYSQL_BIN="D:\mysql5.6.17\bin\mysqldump.exe" set MYSQL_USER=root set MYSQL_PASSWORD= set MYSQL_PORT=3306 set BACKUP_DIR=D:\mysqlBackup\56 set ZIP_TOOL="C:\Program Files\Huorong\AppStore\bin\7z.exe" set BACKUP_COUNT=5 :: 创建备份目录(如果不存在) if not exist "%BACKUP_DIR%" mkdir "%BACKUP_DIR%" :: 获取当前日期时间作为文件名 for /f "tokens=1-4 delims=/ " %%a in ('date /t') do ( set DATE_STR=%%a-%%b-%%c ) for /f "tokens=1-3 delims=: " %%a in ('time /t') do ( set TIME_STR=%%a-%%b ) set DATETIME_STR=%DATE_STR%-%TIME_STR% set BACKUP_FILE=%BACKUP_DIR%\MySQL_Backup_%DATETIME_STR%.sql set ZIP_FILE=%BACKUP_DIR%\MySQL_Backup_%DATETIME_STR%.zip :: 备份所有数据库 echo 正在备份所有MySQL数据库(端口:%MYSQL_PORT%)... %MYSQL_BIN% --user=%MYSQL_USER% --password=%MYSQL_PASSWORD% --host=%MYSQL_HOST% --port=%MYSQL_PORT% --all-databases --routines --events --single-transaction> "%BACKUP_FILE%" :: 检查备份是否成功 if errorlevel 1 ( echo 备份失败! pause exit /b 1 ) echo 备份成功,文件保存在: %BACKUP_FILE% :: 压缩备份文件 echo 正在压缩备份文件... %ZIP_TOOL% a -tzip "%ZIP_FILE%" "%BACKUP_FILE%" :: 删除原始SQL文件 del "%BACKUP_FILE%" :: 删除旧的备份文件,只保留最近的%BACKUP_COUNT%份 echo 清理旧备份文件,只保留最近的%BACKUP_COUNT%份... for /f "skip=%BACKUP_COUNT% eol=: delims=" %%F in ('dir "%BACKUP_DIR%\MySQL_Backup_*.zip" /a-d /o-d /b 2^>nul') do ( echo 删除旧备份文件: %%F del "%BACKUP_DIR%\%%F" ) echo 备份和压缩完成!最终备份文件: %ZIP_FILE% echo 当前保留的备份文件: dir "%BACKUP_DIR%\MySQL_Backup_*.zip" /a-d /o-d /b exit
使用 winscp 同步:
@echo off set WINSCP_PATH="C:\Windows\XFTP\winscp\winscp" %WINSCP_PATH% /command ^ "open sftp://root:123456@192.168.1.9/" ^ "cd /www/dataBackup/254_MySQL" ^ "lcd D:\mysqlBackup\" ^ "synchronize remote -delete -filemask=|.git/ ." ^ "exit"
之后,通过 Windows 的计划任务来定时执行这2个脚本。