[英]Node.js: Backup MySQL database
我想备份一个 MySQL 数据库。 Node.js可以吗? 如果没有,最好的方法是什么?
没有库的简单方法:
var exec = require('child_process').exec;
var child = exec(' mysqldump -u root -p[root_password] [database_name] > dumpfilename.sql');
您可以使用siavolt描述的 exec 方法,它很简单,但不是问题要求的“最佳方法”。
如果您关心系统内存、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',
'-p',
'DB_PASSWORD',
'DB_NAME',
]);
mysqldump
.stdout
.pipe(wstream)
.on('finish', function () {
console.log('Completed')
})
.on('error', function (err) {
console.log(err)
});
如果您的数据库没有密码,您可以删除'-p', 'DB_PASSWORD',
因此代码将变为:
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)
});
您可以使用 node-cron 备份 mySQL 数据库,我喜欢这个,因为它确保您的数据库备份始终运行,无论您托管 Node 应用程序的操作系统如何。
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
简单而强大的方式
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)
var exec = require('child_process').exec(' mysqldump -u root -p dbname > fileName.sql');
这对我有用
const {exec} = require('child_process');
exec('mysqldump --user=root --password=yourPassword --result-file=D:/dbBackup.sql --databases database_name);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.