用nodejs实现备份数据到七牛

这段时间偶尔打理了一下博客,没以前那么勤了,一直想给博客换个皮肤,看来这年无望了,今天没去上课,就在宿舍写了这个玩意。代码并不是很多,实现起来并没有PHP那么快捷,有些地方要绕很多弯。数据库备份完打包的时候,使用系统的命令相比第三方的类库,来的更快,效率更高。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
const Archiver = require('archiver');
const fs = require('fs');
const path = require('path');
module.exports.create=function(conf,callback){
var output = fs.createWriteStream(conf.archiver.fileName);
var archive =new Archiver(conf.archiver.fileType);
archive.on('error', function(err){
throw err;
});
archive.file(conf.mysql.fileName);
archive.pipe(output);
archive.directory(conf.archiver.www,'/'+path.basename(conf.archiver.www));
archive.finalize();
archive.on('finish',function(){
callback();
});
}

nodejs有提供一个zlib库,但是不知道怎么用,最后使用的是archiver这个类库,官方文档看不懂,勉强可以整个文件夹打包起来。博客使用的是MySQL数据库,直接使用mysqldump工具。

1
2
3
4
5
6
7
8
9
10
11
const cp = require('child_process');
module.exports.backup=function(conf,callback){
cp.exec('mysqldump --user='+conf.mysql.user+' --password='+conf.mysql.password+' '+conf.mysql.database+' | gzip > \''+conf.mysql.fileName+'\'',
function(err,stdout,stderr){
if(err) {
callback('error','备份数据库发生错误:'+stderr);
return ;
}
callback();
})
}

上传到七牛过程算是比较简单的,官方提供了示例代码和sdk,稍微修改下即可使用。服务器用的是阿里云,还是上传了几十分钟,不知道国外服务器会不会出错。
代码并不完整,而且写的很渣,进度条,日志都没有添加,并不能保证一定能用,下载完修改配置文件config.js,根据提示设置七牛私钥,数据库用户名和地址代码下载地址:https://tristana.cn/share/backupJS.zip
QQ截图20161216221842.png