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()
6条答案
按热度按时间8nuwlpux1#
不带库的简单方法:
wvyml7n52#
您可以使用exec方法,如siavolt所述,它很简单,但不是问题所要求的“最佳方法”。
如果你关心你的系统内存、CPU和性能,或者你有一个很大的数据库,那么最好的和有效的方法就是沿着流中使用
spawn
,所以在我看来,这是“最好的方法”:如果您的数据库没有密码,您可以删除
'-pDB_PASSWORD',
代码。记住用实际值替换
DB_XXX
,即用'root'
替换'DB_USER'
,或用'-pXXXXXXXX'
替换'-pDB_PASSWORD'
。kokeuurv3#
简单有力的方法
运行:
文件路径:
写入绝对路径示例(签入G磁盘驱动器)
或相对路径
elcex8rz4#
你可以使用node-cron备份mySQL数据库,我喜欢这个,因为它可以确保你的数据库备份总是运行,不管你托管你的节点应用程序的操作系统。
@app.js(为Node应用提供服务的文件)
你可以硬编码所有的DB_USER和DB_PASSWORD,但我发现最好的做法是从.env文件中读取,这样它就可以在开发和生产环境中工作
wydwbb8l5#
这对我很有效
cotxawn76#