如何使用服务器连接错误解决 mongodump 错误代码 0?

Posted

技术标签:

【中文标题】如何使用服务器连接错误解决 mongodump 错误代码 0?【英文标题】:How to resolve mongodump error code 0 with server connection error? 【发布时间】:2021-11-16 22:09:53 【问题描述】:

我正在编写一个使用 mongodump 备份 mongodb 实例的 bash 脚本。脚本有多个步骤,只有在转储成功时才会运行,所以我需要一个错误代码来告诉我备份是否成功运行。我一直在使用以下内容:

for i in $(seq 1 30); do
  mongodump --host mongodb -u user -p password --archive | gzip > backup.gz
  check=$?
  echo "$check"
  if [ "$check" -eq "0" ]; then
    break
  fi
done

if [ "$check" -eq "0" ]; then
  echo "do something with the file"
fi

这很好用,当 mongodump 实际上成功时,但问题是,即使 mongodump 失败,它也会返回 0。这似乎与我从他们的文档 here 中理解的相反。

例如,如果我通过拔下网络电缆断开此服务器与数据库的连接,则会失败并显示错误 Failed: can't create session: could not connect to server: server selection error: server selection timeout。但它的返回码也是0,就像成功一样。

也许应该是这样,但是如果网络错误的错误代码与成功相同,我该如何检查网络错误?

或者说成功来自于 gzip?这会让我产生疑问,为什么 mongodump 即使在网络故障时也会创建备份文件?

【问题讨论】:

【参考方案1】:

$? 替换为 "$PIPESTATUS[0]" 以获取管道中第一个命令 (mongodump ...) 的退出状态。

来自man bash

PIPESTATUS:一个数组变量,包含最近执行的前台管道(可能只包含一个命令)中进程的退出状态值列表。


或者避免使用管道。替换

mongodump --host mongodb -u user -p password --archive | gzip > backup.gz

mongodump --host mongodb -u user -p password --archive > >(gzip > backup.gz)

【讨论】:

以上是关于如何使用服务器连接错误解决 mongodump 错误代码 0?的主要内容,如果未能解决你的问题,请参考以下文章

mongodump备份报错问题

mongodump备份报错问题

mongodump备份报错问题

如何验证由 mongodump 操作产生的文件的完整性?

mongodump 失败且导致mongo服务挂掉

解决MySQL远程连接服务器上的MySQL报1130的错问题