UNPKG

mongodb-data-backup

Version:

A Node.js tool to backup MongoDB databases using mongodump

47 lines (37 loc) 1.38 kB
const { exec } = require('child_process'); const fs = require('fs-extra'); const path = require('path'); const moment = require('moment'); const archiver = require('archiver'); /** * Backs up a MongoDB database using `mongodump` * @param {string} uri - MongoDB connection URI * @param {string} outDir - Output directory for backup * @param {string} dbName - Optional database name * @returns {Promise<string>} - Path to the zip file */ async function backupMongoDB(uri, outDir, dbName = '') { const timestamp = moment().format('YYYY-MM-DD_HH-mm-ss'); const dumpDir = path.join(outDir, `mongo_backup_${timestamp}`); const zipPath = `${dumpDir}.zip`; await fs.ensureDir(outDir); const dumpCmd = `mongodump --uri="${uri}" ${dbName ? `--db=${dbName}` : ''} --out="${dumpDir}"`; return new Promise((resolve, reject) => { exec(dumpCmd, async (error, stdout, stderr) => { if (error) { return reject(`Backup failed: ${stderr}`); } // Zip the backup folder const output = fs.createWriteStream(zipPath); const archive = archiver('zip', { zlib: { level: 9 } }); output.on('close', () => resolve(zipPath)); archive.on('error', (err) => reject(err)); archive.pipe(output); archive.directory(dumpDir, false); await archive.finalize(); }); }); } module.exports = { backupMongoDB, };