Saltar al contenido

NodeJS: Copia de seguridad de la base de datos MySQL

Solución:

forma sencilla sin libs:

var exec = require('child_process').exec;
var child = exec(' mysqldump -u root -p[root_password] [database_name] > dumpfilename.sql');

Puede usar el método exec como lo describe siavolt, es simple pero no es la “mejor manera” como lo solicita la pregunta.

La mejor y más eficiente forma en caso de que le importe la memoria del sistema, la CPU y el rendimiento o si tiene una gran base de datos es utilizar spawn junto con la transmisión, por lo que, en mi opinión, esta es la “mejor manera”:

var fs = require('fs');
var spawn = require('child_process').spawn;
var wstream = fs.createWriteStream('dumpfilename.sql');

var mysqldump = spawn('mysqldump', [
    '-u',
    'DB_USER',
    '-p',
    'DB_PASSWORD',
    'DB_NAME',
]);

mysqldump
    .stdout
    .pipe(wstream)
    .on('finish', function () {
        console.log('Completed')
    })
    .on('error', function (err) {
        console.log(err)
    });

Si su base de datos no tiene contraseña, puede eliminar la '-p', 'DB_PASSWORD', por lo que el código se convertirá en:

var fs = require('fs');
var spawn = require('child_process').spawn;
var wstream = fs.createWriteStream('dumpfilename.sql');

var mysqldump = spawn('mysqldump', [
    '-u',
    'DB_USER',
    'DB_NAME',
]);

mysqldump
    .stdout
    .pipe(wstream)
    .on('finish', function () {
        console.log('Completed')
    })
    .on('error', function (err) {
        console.log(err)
    });

Puede hacer una copia de seguridad de las bases de datos mySQL utilizando node-cron, me gusta esto porque garantiza que su copia de seguridad de la base de datos siempre se ejecutará independientemente del sistema operativo en el que esté alojando su aplicación de nodo.

npm install node-cron
npm install moment (only for file name formatting)

@ app.js (el archivo que le sirve a su aplicación de nodo)

const cron = require('node-cron')
const moment = require('moment')
const fs = require('fs')
const spawn = require('child_process').spawn

// You can adjust the backup frequency as you like, this case will run once a day
cron.schedule('0 0 * * *', () => {
// Use moment.js or any other way to dynamically generate file name
  const fileName = `${process.env.DB_NAME}_${moment().format('YYYY_MM_DD')}.sql`
  const wstream = fs.createWriteStream(`/Path/You/Want/To/Save/${fileName}`)
  console.log('---------------------')
  console.log('Running Database Backup Cron Job')
  const mysqldump = spawn('mysqldump', [ '-u', process.env.DB_USER, `-p${process.env.DB_PASSWORD}`, process.env.DB_NAME ])

  mysqldump
    .stdout
    .pipe(wstream)
    .on('finish', () => {
      console.log('DB Backup Completed!')
    })
    .on('error', (err) => {
      console.log(err)
    })
})

...
...
app.listen()

Puede codificar todo su DB_USER y DB_PASSWORD, pero creo que es una buena práctica leer desde un archivo .env, por lo que puede funcionar tanto en el entorno de desarrollo como en el de producción.

ENVIRONMENT = development
LOCAL_API = http://api.url
GOD_TOKEN = godtokenauthmenow
DB_HOST = 127.0.0.1
DB_NAME = myDatabaseName
DB_USER = myUsername
DB_PASSWORD = myPassword
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *