Skip to content

Instantly share code, notes, and snippets.

@Rehzende
Forked from maximilianschmitt/jobs.js
Last active December 4, 2019 19:23
Show Gist options
  • Save Rehzende/5e11fa16097643c5ad905a87e85fd004 to your computer and use it in GitHub Desktop.
Save Rehzende/5e11fa16097643c5ad905a87e85fd004 to your computer and use it in GitHub Desktop.
Automated MySQL backups to S3 with node.js
'use strict';
var mysqlBackup = require('./mysql-backup');
var schedule = require('node-schedule');
schedule.scheduleJob({ hour: 22, minute: 0 }, mysqlBackup);
'use strict';
var spawn = require('child_process').spawn;
var s3Upload = require('s3-stream-upload');
var config = require('../config');
var Promise = require('bluebird');
var moment = require('moment');
var mysqlBackup = function() {
var upload = s3Upload({
accessKeyId: config.aws.accessKey,
secretAccessKey: config.aws.secretKey,
Bucket: config.aws.buckets.backup.name,
region: config.aws.buckets.backup.region
});
var s3 = upload({ Key: 'mysql-backup-' + moment().format('DD-MM-YYYY-HH-mm-ss') + '.sql' });
var mysqldump = spawn('mysqldump', [
'-u', config.db.connection.user,
'-p' + config.db.connection.password,
config.db.connection.database
]);
return new Promise(function(resolve, reject) {
mysqldump
.stdout
.pipe(s3)
.on('finish', function() {
resolve();
})
.on('error', function(err) {
reject(err);
});
});
};
module.exports = mysqlBackup;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment