NodeJS Script将整个mongoDB数据备份为json文件/压缩格式

时间:2018-04-25 08:36:40

标签: node.js mongodb amazon-s3 cron

我是NodeJS的新手,我必须编写用于将mongoDB数据备份到json文件的脚本,以便备份大小应该更少。 目前我正在获取BSON格式的数据,即大文件。

'use strict';
/**
 * @file callback example
 * @module mongodb-backup
 * @subpackage examples
 * @version 0.0.1
 */

/*
 * initialize module
 */
let AWS = require('aws-sdk');
let fs = require('fs');
let credential = {
    accessKeyId: '',
    secretAccessKey: '',
    region: '',
    bucketname: ''
};
AWS.config.update(credential);
let s3 = new AWS.S3({
    params: {
        Bucket: credential.bucketname
    }
});

let backup = require('mongodb-backup'); // use require('mongodb-backup') instead
let username = process.argv[2],
    password = process.argv[3],
    ip = process.argv[4],
    port = process.argv[5],
    dbName = process.argv[6];
let schedule = require('node-schedule');

let usernameAndpassword;
let ipAndport = ip + ':' + port;
console.log('***Please wait***');
console.log('***Process might take sometime depending on DB size and your connection***');
if (username) {
    if (password) {
        usernameAndpassword = username + ':' + password;
    }
} else {
    usernameAndpassword = null;
}
console.log('you are pointing to :',ipAndport)
let urL;

if (usernameAndpassword) {
    urL = 'mongodb://' + usernameAndpassword + '@' + ipAndport + '/' + dbName;
} else {
    urL = 'mongodb://' + ipAndport + '/' + dbName;
}
let collectionName = [];
for (let i = 7; i >= 7 && i < 50; i++) {
    if (process.argv[i])
        collectionName.push(process.argv[i]);
}

let date = new Date();
let day = ("0" + date.getDate()).slice(-2).toString(),
    month = ("0" + (date.getMonth() + 1)).slice(-2).toString(),
    year = date.getFullYear().toString();


let fileName = day + month + year + '.tar';

if (urL) {
    var j = schedule.scheduleJob('0 28 09 * * 0-5', function () {
        backup({
            uri: urL,
            root: __dirname, // write files into this dir
            tar: fileName,
            callback: function (err) {
                if (err) {
                    console.error(err);
                } else {
                    fs.readFile(fileName, 'utf-8', function (error, result) {
                        let params = {
                            Key: fileName,
                            Body: result,
                            ACL: 'public-read'
                        }
                        s3.upload(params, function (err, data) {
                            if (!err) {
                                fs.unlink('./' + fileName, function (err, res) {
                                    s3.getSignedUrl('getObject', {
                                        Key: params.Key,
                                        Expires: 1200
                                    }, function (err, data) {
                                        console.log('Backup complete , you can download it from here - ', data)
                                    });

                                })
                            }
                        });
                    })

                }
            }
        });
    });


}

0 个答案:

没有答案