现有一台 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个脚本。