You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 17:01:34