文档章节

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

i5ting
 i5ting
发布于 2015/08/23 23:26
字数 1206
阅读 58
收藏 5
点赞 0
评论 2

mongodb备份和导出csv

mongodb备份方式有三种

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

原理

mongodb的简单备份一般使用mongoexport即可,只要你装了mongodb就有的命令,上面说的其他方式适合dba,而非程序员

基本用法

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

说明

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

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

mongoexport --help

帮助文档里。

全库备份

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

如果collection太多呢?真是又臭又长。。。

如果再加个日志,如果再xxx

那感觉才叫一个刺激。。。

以上是我写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

© 著作权归作者所有

共有 人打赏支持
i5ting
粉丝 185
博文 68
码字总数 98509
作品 3
东城
加载中

评论(2)

i5ting
i5ting

引用来自“宇航员们”的评论

都用redis了
情景不一样啊,各自擅长的不一样的
银河缘木
银河缘木
都用redis了
MongoDB CookBook读书笔记之导入导出

本文主要介绍MongoDB的导入导出操作。 一、导入数据 MongoDB支持csv格式的数据导入。本节除了导入MongoDB CookBook书本提供的测试数据,还介绍了其他格式的csv文件数据导入。 如果csv文件中存...

candon123 ⋅ 06/11 ⋅ 0

mongodb的使用mongodump进行数据备份与还原

MongoDB数据备份 在Mongodb中我们使用mongodump命令来备份MongoDB数据。该命令可以导出所有数据到指定目录中。 mongodump命令可以通过参数指定导出的数据量级转存的服务器。 语法 mongodump命...

xinsir999 ⋅ 04/26 ⋅ 0

MongoDB 无法启动,WiredTiger 如何恢复数据(二)?

之前写过一篇MongoDB 无法启动,如何恢复数据的文章,介绍了几种从无法启动的 MongoDB 节点恢复数据的方法,主要包括: 如果配置了副本集多节点,则从其他节点恢复(强烈建议重要的数据至少要...

张友东 ⋅ 04/30 ⋅ 0

2018-06-02 MongoDB 数据库备份及恢复的Lazy & Fast方法

此处无导言、序言及导语。 Mongodump 导出整个库 比如将test库导出至当前目录的output子目录 注意:mongodump为mongo提供的一个命令行工具,非mongodb shell脚本命令,需在系统的shell环境执...

杨梅泡酒 ⋅ 06/02 ⋅ 0

腾讯自研 MongoDB 内核 - CMONGO

CMONGO 是腾讯 TEG 基础架构部在开源 MongoDB 源码的基础上进行了一系列优化的内核版本,目前包括腾讯云 MongoDB 和公司内部很多业务的 MongoDB 服务(如:ckv 冷数据,微信账单等)都在使用...

匿名 ⋅ 06/20 ⋅ 0

大数据分析挖掘学习方向?数据分析师的就业前景怎么样?

加米谷数据分析挖掘课程明细,从理论到云端实操环境到项目实战,手把手教您从0掌握数据分析与挖掘技术,带您走进数据时代。 第一阶段(python基础) python入门:1、Python版本特性介绍2、P...

加米谷大数据 ⋅ 04/17 ⋅ 0

mongodump、mongorestore

通常来说针对collection使用mongoexport导出,而Mongodump可以单表,也可以整库。同时mongoexport输出的JSON比Mongodump的BSON可读性更高,JSON文件可以直接进行读取操,操作拼接指令来inser...

lych528 ⋅ 05/04 ⋅ 0

存储大量爬虫数据的数据库,了解一下?

"当然, 并不是所有数据都适合" 在学习爬虫的过程中, 遇到过不少坑. 今天这个坑可能以后你也会遇到, 随着爬取数据量的增加, 以及爬取的网站数据字段的变化, 以往在爬虫入门时使用的方法局限性...

fesoncn ⋅ 04/09 ⋅ 0

MongoDB 3.0新特性概述

MongoDB 在 2015年3月3日 跳过了 MongoDB 2.8版本,直接在 MongoDB 2.6版本后,发布了MongoDB 3.0版本。 随后在 2015年3月17日 发布了 MongoDB 3.0.1 版本; 在 2015年4月9日发布了 MongoDB ...

xinsir999 ⋅ 05/02 ⋅ 0

Kubernetes 入门:运行不同类型的 Job

本文以 Mongo 数据备份为例,演示在 Kubernetes 集群中运行 Job,以及相关命令和概念。 部署 MongoDB 1、创建 Mongo 部署文件 2、部署 Mongo 3、在 Dashboard 中查看 Mongo 服务相关信息,访...

Anoyi ⋅ 05/11 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Sqoop

1.Sqoop: 《=》 SQL to Hadoop 背景 1)场景:数据在RDBMS中,我们如何使用Hive或者Hadoop来进行数据分析呢? 1) RDBMS ==> Hadoop(广义) 2) Hadoop ==> RDBMS 2)原来可以通过MapReduce I...

GordonNemo ⋅ 37分钟前 ⋅ 0

全量构建和增量构建的区别

1.全量构建每次更新时都需要更新整个数据集,增量构建只对需要更新的时间范围进行更新,所以计算量会较小。 2.全量构建查询时不需要合并不同Segment,增量构建查询时需要合并不同Segment的结...

无精疯 ⋅ 47分钟前 ⋅ 0

如何将S/4HANA系统存储的图片文件用Java程序保存到本地

我在S/4HANA的事务码MM02里为Material维护图片文件作为附件: 通过如下简单的ABAP代码即可将图片文件的二进制内容读取出来: REPORT zgos_api.DATA ls_appl_object TYPE gos_s_obj.DA...

JerryWang_SAP ⋅ 今天 ⋅ 0

云计算的选择悖论如何对待?

导读 人们都希望在工作和生活中有所选择。但心理学家的调查研究表明,在多种选项中进行选择并不一定会使人们更快乐,甚至不会产生更好的决策。心理学家Barry Schwartz称之为“选择悖论”。云...

问题终结者 ⋅ 今天 ⋅ 0

637. Average of Levels in Binary Tree - LeetCode

Question 637. Average of Levels in Binary Tree Solution 思路:定义一个map,层数作为key,value保存每层的元素个数和所有元素的和,遍历这个树,把map里面填值,遍历结束后,再遍历这个map,把每...

yysue ⋅ 今天 ⋅ 0

IDEA配置和使用

版本控制 svn IDEA版本控制工具不能使用 VCS-->Enable Version Control Integration File-->Settings-->Plugins 搜索Subversion,勾选SVN和Git插件 删除.idea文件夹重新生成项目 安装SVN客户......

bithup ⋅ 今天 ⋅ 0

PE格式第三讲扩展,VA,RVA,FA的概念

作者:IBinary 出处:http://www.cnblogs.com/iBinary/ 版权所有,欢迎保留原文链接进行转载:) 一丶VA概念 VA (virtual Address) 虚拟地址的意思 ,比如随便打开一个PE,找下它的虚拟地址 这边...

simpower ⋅ 今天 ⋅ 0

180623-SpringBoot之logback配置文件

SpringBoot配置logback 项目的日志配置属于比较常见的case了,之前接触和使用的都是Spring结合xml的方式,引入几个依赖,然后写个 logback.xml 配置文件即可,那么在SpringBoot中可以怎么做?...

小灰灰Blog ⋅ 今天 ⋅ 0

冒泡排序

原理:比较两个相邻的元素,将值大的元素交换至右端。 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第...

人觉非常君 ⋅ 今天 ⋅ 0

Vagrant setup

安装软件 brew cask install virtualboxbrew cask install vagrant 创建project mkdir -p mst/vmcd mst/vmvagrant init hashicorp/precise64vagrant up hashicorp/precise64是一个box......

遥借东风 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部