mongodb备份-mmb使用说明和如何导出更可读的csv

mongodb备份和导出csv

mongodb备份方式有三种node

  • 文件快照方式
  • 复制数据文件方式
  • 使用mongodump方式

原理

mongodb的简单备份通常使用mongoexport便可,只要你装了mongodb就有的命令,上面说的其余方式适合dba,而非程序员linux

基本用法git

mongoexport -d xxx-db -c activities -o activities.csv

说明程序员

  • -d 指明数据库是哪一个
  • -c 说明collection名字
  • -o 是输出的文件名称

其实还有jsonArray,query等其余高级用法,尽在github

mongoexport --help

帮助文档里。mongodb

全库备份

以前的作法是写一个shell脚本,把上面的每个collection拷贝一行,而后crontab定时去执行shell

若是collection太多呢?真是又臭又长。。。数据库

若是再加个日志,若是再xxxexpress

那感受才叫一个刺激。。。npm

以上是我写mmb的动机

如今说说个人解决方案,即mmb

mmb是神马?

mmb是moa mongodb backup,很直白的说它是备份mongodb数据的。

readme里我是这样写的

mmb = moa mongodb backup, backup data to a dirname that generated by momentjs's date format

它能够根据配置项里的dirname选项,按照时间去生成目录,也就是说我想按照天去备份,就写成

"dirname":"YYYY-MM-DD"

我想按照秒备份

"dirname":"YYYY-MM-DD HH:mm:ss"

特性

  • 支持linux和mac(严格的说,支持shell的均可以)
  • 纯nodejs写的模块,提供cli,能够简单实用
  • 支持配置文件
  • 支持多个实例
  • 支持crontab,使用简单

Install

[sudo] npm install -g mmb

Usages

第一步初始化一个配置文件,执行

mmb init

此时,用任何编辑器打开mongo.config.json,按须要修改里面的配置文件便可,而后就能够备份数据了:

mmb

会读取当前目录下的mongo.config.json文件,根据文件内的配置信息,备份所有数据到指定目录。

配置文件说明

当执行 mmb init, 会建立mongo.config.json文件,它就是mmb的配置文件

mongodb服务器配置项

  • "host": 127.0.0.1
  • "port": 27017
  • "db": database name

备份数据目录名称配置项

说明:

"dirname":"YYYY-MM-DD HH:mm:ss"

这样的format里有空格没法生成目录名,因此空格会替换为_

与crontab集成:以每分钟为例

若是不了解crontab,请移步https://www.baidu.com/s?wd=crontab&rsv_spt=1&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_sug3=3&rsv_sug1=3

第一步:初始化

mmb init

第二步:修改配置文件,假定个人mongodb信息不变,我须要修改dirname,按分钟生成,具体以下:

{
  "host": "127.0.0.1",
  "port": "27017",
  "db": "xbm-wechat-api",
  "dirname":"YYYY-MM-DD HH:mm"
}

第三步:测试

mmb

看看,生成的目录是否正常,以及目录里的数据是否正常

➜  mongodbbackup  date
Sun Aug 23 22:42:14 CST 2015
➜  mongodbbackup  mmb  
➜  mongodbbackup  ls
2015-08-23_22:42     2015-08-23_22:42.log export.sh            mongo.config.json

这样就表明是正确的。

第四步:集成crontab,写一个脚本cron.sh

➜  mongodbbackup  cat cron.sh 
 #!/bin/bash

cd /Users/sang/test/mongodbbackup
mmb

而后,给cron.sh增长执行权限

chmod +x cron.sh

配置crontab,定时执行cron.sh

➜  mongodbbackup  touch cron-mmb.conf

填写如下内容

* * * * * sh /Users/sang/test/mongodbbackup/cron.sh

保存便可。

➜  mongodbbackup  sudo crontab -u root cron-mmb.conf

这样每分钟都会执行cron.sh,即每分钟备份一次了

五个星星表示

  • minute — 分钟,从 0 到 59 之间的任何整数
  • hour — 小时,从 0 到 23 之间的任何整数
  • day — 日期,从 1 到 31 之间的任何整数(若是指定了月份,必须是该月份的有效日期)
  • month — 月份,从 1 到 12 之间的任何整数(或使用月份的英文简写如 jan、feb 等等)
  • dayofweek — 星期,从 0 到 7 之间的任何整数,这里的 0 或 7 表明星期日(或使用星期的英文简写如 sun、mon 等等)

crontab简单用法说明

  • crontab -l显示目前全部的任务
  • crontab -r删除全部的任务
  • crontab -e编辑任务

导出csv

照理说mongoexport是支持导出csv,可是那个东西基本不能看,不是人读的

1.png

那么有没有更好一点的作法呢?

以jsonArray导出

➜  mongodbbackup  mongoexport -d xbm-wechat-api -c senddeliveryhistories -o senddeliveryhistories.json  --jsonArray --query "{'user_to_name' : 'ywiwfi'}"
2015-08-23T23:12:45.668+0800	connected to: localhost
2015-08-23T23:12:45.670+0800	exported 1 record
➜  mongodbbackup  cat senddeliveryhistories.json 
[{"__v":0,"_id":{"$oid":"55bf208846b246fa238ff4d7"},"created_at":{"$date":"2015-08-03T08:04:24.648Z"},"date":"20150803","delivery_number":"","express":{"$oid":"5559a7edcb20cb272f412d96"},"express_company":"sfjowj","express_remark":"wifyiwfi","items":[],"last_modified_at":{"$date":"2015-08-03T08:04:24.648Z"},"last_modified_user":"","remark":"jjjj","status":2,"user_from_address":"kjwiji","user_from_id":{"$oid":"5559944fa56f3f192e22d2d4"},"user_from_mobile":"ijfij","user_from_name":"lwlfl","user_to_address":"uwyfuwi","user_to_id":{"$oid":"555993e7c3ab570c2eb23687"},"user_to_mobile":"uyfowhohi","user_to_name":"ywiwfi"}]

启动j2csv

把拷贝json文件里的内容,放到文本框里

➜  mongodbbackup  j2csv

2.png

more

若是你有更好的办法请不吝赐教 shiren1118@126.com

全文完

欢迎关注个人公众号【node全栈】

node全栈.png

相关文章
相关标签/搜索