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

如何通过Node.js使用MongoDump URI备份Mongo Atlas M0集群并实现定时备份

错误原因排查
  • spawn参数格式错误:spawn的第二个参数为命令参数数组,选项名和对应值必须拆分为两个独立的数组元素,不可将--uri和连接串合并为同一个字符串。终端执行时shell会自动完成参数拆分,而spawn默认不启用shell解析,因此会识别参数失败返回错误码。
  • 语法错误:async function backupMongoDbData后缺少括号,属于语法不合法问题。
  • 不必要的await:child_process.spawn是同步返回子进程实例的方法,本身不返回Promise,无需加await修饰。
修复后的完整实现代码
const { spawn } = require('child_process');
const cron = require('node-cron');
const fs = require('fs');
const path = require('path');

// 提前创建备份目录,避免路径不存在报错
const backupDir = path.join(__dirname, 'BackupData');
if (!fs.existsSync(backupDir)) {
  fs.mkdirSync(backupDir, { recursive: true });
}

// 按需调整cron表达式,示例为每天凌晨2点执行
cron.schedule('0 2 * * *', () => {
  backupMongoDbData();
});

function backupMongoDbData() {
  // 按时间生成备份文件名,避免覆盖历史备份
  const backupPath = path.join(backupDir, `${new Date().toISOString().replace(/[:.]/g, '-')}.archive.gz`);

  const child = spawn('mongodump', [
    "--uri", 
    "mongodb+srv://DBusername:DBpassword@DBcluster/databaseName",
    `--archive=${backupPath}`,
    '--gzip',
  ]);

  child.stdout.on('data', (data) => {
    console.log('stdout:\n', data.toString());
  });
  child.stderr.on('data', (data) => {
    console.log('stderr:\n', data.toString());
  });
  child.on('error', (error) => {
    console.log('error:\n', error);
  });
  child.on('exit', (code, signal) => {
    if (code) console.log('Process exit with code:', code);
    else if (signal) console.log('Process killed with signal:', signal);
    else console.log('Backup is successful');
  });
}
MongoAtlas M0集群适配注意事项
  • 运行脚本的服务器IP必须提前加入MongoAtlas控制台的IP白名单,否则会被拦截无法连接集群
  • 本地安装的mongodump工具主版本需要和Atlas M0集群的MongoDB版本保持一致,避免版本不兼容导致备份失败
  • 若连接串包含特殊字符,无需额外转义,spawn传递参数时会自动处理特殊字符的转义问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 14:45:04