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

相關文章
相關標籤/搜索