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

MongoDB PowerShell备份脚本未生成备份文件求助

MongoDB备份脚本故障排查与修复

问题根源分析

  1. 数据库列表解析错误:mongo --eval "db.getMongo().getDBNames()"返回的是JSON格式数组(如["admin","local"]),直接赋值给$dbs会导致遍历的是字符串片段而非真实数据库名,mongodump无法识别无效名称,自然无备份产出。
  2. try/catch未生效:mongodump是外部命令,PowerShell默认不会将其非零退出码视为异常,即使备份失败,脚本仍会记录“导出成功”,造成日志与实际结果不符。
  3. 目录操作逻辑冗余:先创建备份目录再删除重建的操作完全多余,且可能干扰后续路径指向。
  4. 无错误捕获机制:未收集mongodump的错误输出,无法定位具体失败原因。

修复后的脚本

# 定义备份目录与日志路径
$backupDirectory = "C:\MongoDBBackups"
$logFile = Join-Path -Path $backupDirectory -ChildPath "log.log"

# 确保备份目录存在
if (!(Test-Path -Path $backupDirectory)) {
    New-Item -ItemType Directory -Path $backupDirectory | Out-Null
}

# 正确获取并解析数据库列表
$dbsJson = mongo --quiet --host 127.0.0.1:27017 --eval "JSON.stringify(db.getMongo().getDBNames())"
$dbs = ConvertFrom-Json -InputObject $dbsJson

foreach ($db in $dbs) {
    # 可选:跳过MongoDB系统数据库(admin/local/config)
    if ($db -in @("admin", "local", "config")) {
        Write-Output "跳过系统数据库: $db" | Out-File -FilePath $logFile -Append
        continue
    }

    # 处理数据库名中的非法字符
    $safeDbName = $db -replace '[/\\:*?\"<>|]',''
    $backupPath = Join-Path -Path $backupDirectory -ChildPath $safeDbName

    try {
        # 执行备份并捕获错误输出
        mongodump --db $db --out $backupPath 2>&1
        # 检查外部命令退出码,非0则抛出异常
        if ($LASTEXITCODE -ne 0) {
            throw "mongodump执行失败,退出码: $LASTEXITCODE"
        }
        Write-Output "成功导出数据库: $db" | Out-File -FilePath $logFile -Append
    } catch {
        $errorMessage = $_.Exception.Message
        Write-Output "导出数据库 $db 失败: $errorMessage" | Out-File -FilePath $logFile -Append
    }
}

Write-Output "所有数据库备份任务已完成" | Out-File -FilePath $logFile -Append

关键修复点说明

  • JSON解析数据库列表:用JSON.stringify和ConvertFrom-Json将MongoDB返回的数组转为PowerShell可识别的数组,确保遍历的是有效数据库名。
  • 捕获外部命令错误:通过$LASTEXITCODE判断mongodump执行状态,手动触发异常进入catch块,记录真实错误信息。
  • 路径安全处理:使用Join-Path拼接路径,避免手动拼接导致的格式错误;提前过滤数据库名中的非法字符,避免创建无效路径。
  • 错误输出合并:2>&1将mongodump的错误输出重定向到标准输出,便于在日志中查看具体失败原因。

内容的提问来源于stack exchange,提问作者Adil15

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 13:15:31