{"id":20475,"date":"2017-01-13T10:14:13","date_gmt":"2017-01-13T15:44:13","guid":{"rendered":"https:\/\/www.solutionanalysts.com\/blog\/auto-backup-mongodb-database-with-nodejs-on-server\/"},"modified":"2024-09-04T03:38:51","modified_gmt":"2024-09-04T09:08:51","slug":"auto-backup-mongodb-database-with-nodejs-on-server","status":"publish","type":"post","link":"https:\/\/www.solutionanalysts.com\/blog\/auto-backup-mongodb-database-with-nodejs-on-server\/","title":{"rendered":"Auto Backup MongoDB Database with NodeJS on server"},"content":{"rendered":"<p>This tutorial describes the process for Auto Backup MongoDB Database with NodeJS on server.<\/p>\n<p><strong>Prerequisites:<\/strong><\/p>\n<ul>\n<li>Fs and lodash npm modules are installed.<\/li>\n<li>Make sure that your mongodb is protected with username and password, if not than follow steps from below link.<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"Step_1\"><\/span><span style=\"font-weight: 400;\">Step 1<\/span><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Create a js file in your project folder called mongodb_backup.js and add below code.<\/p>\n<p>Replace variables &lt; databaseUsername &gt;, &lt; databasePassword &gt;, &lt; databaseName &gt; , &lt; serverPath &gt; with the values of your database.<\/p>\n<pre class=\"lang:javascript\">var fs = require('fs');\r\nvar _ = require('lodash');\r\nvar exec = require('child_process').exec;\r\n\r\nvar dbOptions =  {\r\nuser: '&lt;databaseUsername&gt;',\r\npass: '&lt;databasePassword&gt;',\r\nhost: 'localhost',\r\nport: 27017,\r\ndatabase: '&lt;databaseName&gt;',\r\nautoBackup: true, \r\nremoveOldBackup: true,\r\nkeepLastDaysBackup: 2,\r\nautoBackupPath: '&lt;serverPath&gt;' \/\/ i.e. \/var\/database-backup\/\r\n};\r\n\r\n\t\/* return date object *\/\r\nexports.stringToDate = function (dateString) {\r\n    return new Date(dateString);\r\n}\r\n\t\r\n\t\/* return if variable is empty or not. *\/\r\nexport.empty = function(mixedVar) {\r\n    var undef, key, i, len;\r\n    var emptyValues = [undef, null, false, 0, '', '0'];\r\n    for (i = 0, len = emptyValues.length; i &lt; len; i++) {\r\n        if (mixedVar === emptyValues[i]) {\r\n        return true;\r\n        }\r\n    }\r\n    if (typeof mixedVar === 'object') {\r\n        for (key in mixedVar) {\r\nreturn false;\r\n        }\r\n        return true;\r\n    }\r\n    return false;\r\n};\r\n\r\n\r\n\t\/\/ Auto backup script\r\n\r\ndbAutoBackUp: function () {\r\n\/\/ check for auto backup is enabled or disabled\r\n    if (dbOptions.autoBackup == true) {\r\n        var date = new Date();\r\n        var beforeDate, oldBackupDir, oldBackupPath;\r\n        currentDate = this.stringToDate(date); \/\/ Current date\r\n        var newBackupDir = currentDate.getFullYear() + '-' + (currentDate.getMonth() + 1) + '-' + currentDate.getDate();\r\n        var newBackupPath = dbOptions.autoBackupPath + 'mongodump-' + newBackupDir; \/\/ New backup path for current backup process\r\n        \/\/ check for remove old backup after keeping # of days given in configuration\r\n        if (dbOptions.removeOldBackup == true) {\r\n            beforeDate = _.clone(currentDate);\r\n            beforeDate.setDate(beforeDate.getDate() - dbOptions.keepLastDaysBackup); \/\/ Substract number of days to keep backup and remove old backup\r\n            oldBackupDir = beforeDate.getFullYear() + '-' + (beforeDate.getMonth() + 1) + '-' + beforeDate.getDate();\r\n            oldBackupPath = dbOptions.autoBackupPath + 'mongodump-' + oldBackupDir; \/\/ old backup(after keeping # of days)\r\n        }\r\n        var cmd = 'mongodump --host ' + dbOptions.host + ' --port ' + dbOptions.port + ' --db ' + dbOptions.database + ' --username ' + dbOptions.user + ' --password ' + dbOptions.pass + ' --out ' + newBackupPath; \/\/ Command for mongodb dump process\r\n\r\n        exec(cmd, function (error, stdout, stderr) {\r\n            if (this.empty(error)) {\r\n                \/\/ check for remove old backup after keeping # of days given in configuration\r\n              \tif (dbOptions.removeOldBackup == true) {\r\n                    if (fs.existsSync(oldBackupPath)) {\r\n                        exec(\"rm -rf \" + oldBackupPath, function (err) { });\r\n                    }\r\n                }\r\n            }\r\n        });\r\n    }\r\n}<\/pre>\n<h2><span class=\"ez-toc-section\" id=\"Step_2\"><\/span>Step 2<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>To create cron install cron module from NPM package manager https:\/\/www.npmjs.com\/package\/cron using below command<\/p>\n<p><strong>npm install cron &#8211;save<\/strong><\/p>\n<p>Add below code into your <strong>server.js \/ main.js \/ index.js<\/strong><\/p>\n<p><strong> global.CronJob = require(\u2018Your path to cron.js file\u2019);\u00a0<\/strong><\/p>\n<p>Now create <strong>cron.js<\/strong> file in your project and paste below code in it.<\/p>\n<pre class=\"lang:javascript\">var CronJob = require('cron').CronJob;\r\n\tvar Cron = require('.\/mongodb_backup.js');\r\n\r\n\tnew CronJob('0 0 0 * * *', function() {\r\n    Cron.dbAutoBackUp();\r\n}, null, true, 'America\/New_York');<\/pre>\n<p>Any questions or problems, please, ask us and We&#8217;ll happy to help you.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This tutorial describes the process for Auto Backup MongoDB Database with NodeJS on server. Prerequisites: Fs and lodash npm modules are installed. Make sure that your mongodb is protected with username and password, if not than follow steps from below link. Step 1 Create a js file in your project folder called mongodb_backup.js and add [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":20476,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[132],"tags":[],"class_list":["post-20475","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-big-data"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.solutionanalysts.com\/blog\/wp-json\/wp\/v2\/posts\/20475","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.solutionanalysts.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.solutionanalysts.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.solutionanalysts.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.solutionanalysts.com\/blog\/wp-json\/wp\/v2\/comments?post=20475"}],"version-history":[{"count":1,"href":"https:\/\/www.solutionanalysts.com\/blog\/wp-json\/wp\/v2\/posts\/20475\/revisions"}],"predecessor-version":[{"id":32881,"href":"https:\/\/www.solutionanalysts.com\/blog\/wp-json\/wp\/v2\/posts\/20475\/revisions\/32881"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.solutionanalysts.com\/blog\/wp-json\/wp\/v2\/media\/20476"}],"wp:attachment":[{"href":"https:\/\/www.solutionanalysts.com\/blog\/wp-json\/wp\/v2\/media?parent=20475"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.solutionanalysts.com\/blog\/wp-json\/wp\/v2\/categories?post=20475"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.solutionanalysts.com\/blog\/wp-json\/wp\/v2\/tags?post=20475"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}