Skip to content

Instantly share code, notes, and snippets.

@gdm
Forked from maximilianschmitt/jobs.js
Last active December 20, 2016 09:51
Show Gist options
  • Select an option

  • Save gdm/76ad6ea93288e3ca83b77e5aabff05fb to your computer and use it in GitHub Desktop.

Select an option

Save gdm/76ad6ea93288e3ca83b77e5aabff05fb 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() {
AWS.config.update({ region: config.aws.buckets.backup.region });
var s3Client = new AWS.S3();
var s3 = s3Upload(s3Client, {
Bucket: config.aws.buckets.backup.name,
Key: 'mysql-backup-' + moment().format('YYYY-MM-DD-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