Skip to content

Node influxdb backup/restore module.

License

Notifications You must be signed in to change notification settings

robertsLando/node-influxdb-backup

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

25 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

influx-backup

NPM version Downloads

PRs Welcome MIT Licence

NPM

Description πŸ“”

NodeJS module for InfluxDB backup/restore.

This module uses the influxd command to backup and restore the backup, the backup consists in a zip file with all the data generated by the influxd command.

Uses InfluxDB portable backups introduced in InfluxDb v1.5, check docs for more info.

Requirements ❗

  • influxd bin must be installed in your system. Check it by running which influxd command
  • InfluxDB version > v1.5

Install πŸ”Œ

Run the following command in the root directory of your project

npm install influx-backup --save 

Usage πŸ”§

Check JSDocs and the Express example.

Here are some lines from examples/app.js

const BackupManager = require('influx-backup'); const TEST_DB = "testDB"; const manager = new BackupManager({db: TEST_DB}); // Restore DB api app.post('/restore', (req, res) => { var restore_path = ""; // create a temp directory to use for the backup manager.createDir() .then((dir) => { restore_path = dir; // Use multer to get the file from the req // and store it in the temp dir created var Storage = multer.diskStorage({ destination: restore_path, filename: function(req, file, callback) { callback(null, file.originalname); } }); // "restore" is the name attr of input file in html var upload = multer({storage: Storage}).single("restore"); return multerPromise(upload, req, res) }) .then((file) => { //now the file is stored correctly, I can start the restore command if(file){ return manager.restore(restore_path, file.originalname) }else{ throw Error("No file provided"); } }) //the backup has been restored in a backup database, load the backup in the main database .then(() => manager.loadBackup()) .then(() => res.json({success:true, message: "Backup restored successfully"})) .catch(err => { console.log(err); res.json({success:false, message: err.message}) }); }); // Backup DB api app.get('/backup', (req, res) => { manager.backup() .then((file) => { //zip file is ready, send it to the client var stream = fs.createReadStream(file); res.setHeader('Content-disposition', 'attachment; filename=' + file.split('/').pop()); stream.once("close", function () { stream.destroy(); // makesure stream closed, not close if download aborted. //IMPORTANT: remove backup files and zip manager.deleteDir(path.dirname(file)); }); stream.pipe(res); }) .catch(err => { res.json({success: false, message: err}); }); }); // Check testDB exists, if not create one and start app listening on port 8000 influx.getDatabaseNames() .then(names => { if (!names.includes(TEST_DB)) { return influx.createDatabase(TEST_DB) } }) .then(() => manager.init()) .then(() => { app.listen(8000, function () { console.log('Listening on port 8000') }) }) .catch(err => { console.error(`Error creating Influx database!`) })

FAQ ❓

Q: Why I can't restore directly to the main database?

A: Actually InfluxDB doesn't allows to restore data in an existing database, the only way to do this is to load the backup in a temporary database and than use a query to load the data from the temporary database to the existing one. More details here

Author :bowtie:

Daniel Lando

Support me on Patreon ❀️

About

Node influxdb backup/restore module.

https://robertslando.github.io/node-influxdb-backup/

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

  •  

Packages

No packages published