Node.js:备份MySQL数据库

x33g5p2x  于 2023-04-05  发布在  Node.js
关注(0)|答案(6)|浏览(232)

我想备份一个MySQL数据库。是否可以在Node.js中进行备份?如果不可以,最好的方法是什么?

8nuwlpux

8nuwlpux1#

不带库的简单方法:

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

wvyml7n52#

您可以使用exec方法,如siavolt所述,它很简单,但不是问题所要求的“最佳方法”。
如果你关心你的系统内存、CPU和性能,或者你有一个很大的数据库,那么最好的和有效的方法就是沿着流中使用spawn,所以在我看来,这是“最好的方法”:

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

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

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

如果您的数据库没有密码,您可以删除'-pDB_PASSWORD',代码。
记住用实际值替换DB_XXX,即用'root'替换'DB_USER',或用'-pXXXXXXXX'替换'-pDB_PASSWORD'

kokeuurv

kokeuurv3#

简单有力的方法

npm install mysqldump

运行:

import mysqldump from 'mysqldump';
// or const mysqldump = require('mysqldump')
 
// dump the result straight to a file
mysqldump({
    connection: {
        host: 'localhost',
        user: 'root',
        password: '123456',
        database: 'my_database',
    },
    dumpToFile: './dump.sql',
});

文件路径:
写入绝对路径示例(签入G磁盘驱动器)

dumpToFile:'G:\dump.sql'

或相对路径

dumpToFile:'.\dump.sql' (root of project directory)
elcex8rz

elcex8rz4#

你可以使用node-cron备份mySQL数据库,我喜欢这个,因为它可以确保你的数据库备份总是运行,不管你托管你的节点应用程序的操作系统。

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

@app.js(为Node应用提供服务的文件)

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()

你可以硬编码所有的DB_USER和DB_PASSWORD,但我发现最好的做法是从.env文件中读取,这样它就可以在开发和生产环境中工作

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
wydwbb8l

wydwbb8l5#

var exec = require('child_process').exec(' mysqldump -u root -p dbname > fileName.sql');

这对我很有效

cotxawn7

cotxawn76#

const {exec} = require('child_process');

exec('mysqldump --user=root --password=yourPassword --result-file=D:/dbBackup.sql --databases database_name);

相关问题