node 备份MySQL_Windows环境中 node后台使用代码备份mysql数据库

在Windows环境中备份数据库有很多办法,文中仅说明如何使用代码来实现备份功能。

备份数据库最常用的就是使用cmd命令进行备份,其代码如下:

E:

cd E:\SOFT\MySQL\mysql-5.7.24-winx64\bin

mysqldump -uroot -p123456 --lock-all-tables --flush-logs e3db > E:/1586916254571.sql

代码第一行:切换盘符,cmd默认在C盘,所以需要把根盘符切换到mysql安装的那个盘符

代码第二行:切换路径,将路径切换到mysql安装目录的bin目录下,因为mysqldump命令需要在这个路径下才能被正确识别

代码第三行:-u后面跟着数据库账户,-p跟着密码,大于号前面为需要备份的数据库名,后面是需要备份的文件名和路径。其中备份路径不允许有中文存在,不然有极大可能无法生成备份文件。

上面三行代码就是只用cmd命令进行数据库备份的操作,那么如何使用node来控制呢?这里我介绍使用node执行bat文件。代码如下:

const path = require('path');

const fs = require('fs');

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

execFile(path.resolve('./backupTask/test.bat'),{encoding: 'buffer'}, (err, stdout, stderr) => {

if (err) {

console.error(err);

return;

}

if(fs.existsSync(filePath)){

console.log('生成成功');

} else {

console.log('生成失败')

}

});

在node中使用child_process这个子进程来实现控制bat命令文件的执行,需要注意的是,不管是bat命令文件中的命令还是node后台所在的项目路径都不建议出现中文字符,楼主在测试的时候由于项目路径下存在中文,导致执行的时候要么报错要么执行成功但是没有生成任何的文件。

按照上述的说法就可以正常执行bat命令,把数据库成功的备份出来。如果你想要能动态改变备份文件的文件名,那么只要结合fs模块的writeFile就可以达到命令的动态生成。下面贴出楼主完整的代码。

log.allLog.info('启动数据库备份命令');

let backupDir = config.backupConfig.dbDir; // 设置备份路径

backupDir = backupDir.replace(/\\/g, '/'); // 路径斜杠替换

let filePath = backupDir + '/' + new Date().getTime() + '.sql'; // 根据时间戳生成备份文件路径+文件名

log.allLog.info('生成备份路径和文件名:' + filePath);

// 生成cmd命令字符串

let cmdStr = `${config.backupConfig.drive}

${config.backupConfig.binPath}

mysqldump -u${config.username} -p${config.password} --lock-all-tables --flush-logs ${config.database} > ${filePath}`;

fs.writeFile('./batCmd/run.bat', cmdStr, {encoding: 'utf8'}, err => {

if (err) {

log.errLog.error('数据库备份命令写入文件错误,', err);

return;

}

log.allLog.info('数据库备份命令写入成功');

log.allLog.info('执行命令文件,文件路径:' + path.resolve('./batCmd/run.bat'));

execFile(path.resolve('./batCmd/run.bat'), {encoding: 'buffer'}, (err, stdout, stderr) => {

if (err) {

log.errLog.error('数据库备份命令执行错误,', err);

return;

}

log.allLog.info('数据库备份命令执行成功,正在检测文件是否成功生成');

if (fs.existsSync(filePath)) {

log.allLog.info('数据库备份命令执行成功,成功检测到文件:' + filePath);

} else {

log.errLog.error('数据库备份命令执行成功,但未检测到备份文件');

}

});

});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值