mongodb-data-backup
Version:
A Node.js tool to backup MongoDB databases using mongodump
47 lines (37 loc) • 1.38 kB
JavaScript
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,
};