如何修改MySQL批处理脚本将两个数据库备份至单个.sql文件
修改后的批处理脚本方案
方案1:直接指定两个数据库一次性备份(推荐)
这种方式更高效,mysqldump原生支持一次性指定多个数据库,生成单个规范的备份文件:
@echo off setlocal enabledelayedexpansion :: 定义要备份的两个数据库,用空格分隔,替换为你实际的库名 set "target_dbs=performance_schema your_second_db" :: 处理数据库名中的特殊字符(将@002d替换为-) set "formatted_dbs=" for %%D in (%target_dbs%) do ( set "db=%%D" set "db=!db:@002d=-!" set "formatted_dbs=!formatted_dbs! !db!" ) :: 执行合并备份 %mysqldumpexe% --user=%dbuser% --password=%dbpass% --port=3306 --databases %formatted_dbs% --routines --log-error=%errorLogPath% > "%backupfldr%combined.%backuptime%.sql" echo 已完成两个数据库的合并备份
方案2:保留目录遍历逻辑(动态筛选目标库)
如果你需要通过遍历目录来筛选出两个目标数据库,再执行合并备份:
@echo off setlocal enabledelayedexpansion set "target_dbs=" FOR /D %%F IN (*) DO ( :: 筛选需要备份的两个数据库,替换为你实际的库名 IF [%%F]==[performance_schema] ( set "db=%%F" set "db=!db:@002d=-!" set "target_dbs=!target_dbs! !db!" ) ELSE IF [%%F]==[your_second_db] ( set "db=%%F" set "db=!db:@002d=-!" set "target_dbs=!target_dbs! !db!" ) ELSE ( echo Skipping DB backup for %%F ) ) :: 检查是否有目标库,执行备份 if not "!target_dbs!"=="" ( %mysqldumpexe% --user=%dbuser% --password=%dbpass% --port=3306 --databases !target_dbs! --routines --log-error=%errorLogPath% > "%backupfldr%combined.%backuptime%.sql" echo 已完成合并备份 ) else ( echo 未找到需要备份的目标数据库 )
关键修改说明
- 取消原脚本中单次备份单文件的逻辑,改为收集所有目标库名后一次性调用
mysqldump,避免重复SQL头部信息,保证备份文件结构规范。 - 保留了原脚本中数据库名特殊字符替换的逻辑,确保备份命令正常执行。
- 使用
setlocal enabledelayedexpansion保证循环内变量替换的正确性。
内容的提问来源于stack exchange,提问作者Coder
相关产品推荐
相关产品推荐

