# elf2mongo

> elf to mongodb

Latest version **1.2.2** (published 2015-09-25) · MIT license · 0 weekly downloads

## Install

```sh
npm install elf2mongo
pnpm add elf2mongo
yarn add elf2mongo
bun add elf2mongo
```

Provides the commands `mb`, `mi`, `mmb`, `mmi`, `mongobackup`.

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.2.2 |
| Published | 2015-09-25 |
| First published | 2015-09-25 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 6 |
| Known vulnerabilities | 0 (+3 in 2 direct dependencies) |
| Install scripts | no |
| Maintainers | heyanjiemao |

## Links

- npm: https://www.npmjs.com/package/elf2mongo
- npm.io page: https://npm.io/package/elf2mongo

## Dependencies (6)

- [moment](https://npm.io/package/moment.md) ^2.10.6
- [mongodb](https://npm.io/package/mongodb.md) ^2.0.33
- [shelljs](https://npm.io/package/shelljs.md) ^0.5.3
- [bluebird](https://npm.io/package/bluebird.md) ^2.9.34
- [commander](https://npm.io/package/commander.md) ^2.8.1
- [tpl_apply](https://npm.io/package/tpl_apply.md) ^1.0.2

## Recent versions

- 1.2.2 (latest) — 2015-09-25
- 1.2.1 — 2015-09-25
- 1.2.0 — 2015-09-25
- 1.0.0 — 2015-09-25

## README

# mongodb备份和恢复

 mongodb备份方式有三种

 -  文件快照方式
 - 复制数据文件方式
 - 使用mongodump方式 (整库)

oplog以及副本集，集群等备份，还是推荐用mongodump

## 原理

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

基本用法

    mongoexport -u 'username' -p 'password' -h 'host' -d xxx-db -c activities -o activities.csv

说明

- -u 指明此数据库帐号，authenticationDatabase级别（可选）
- -p 指明此数据库密码，authenticationDatabase级别（可选）
- -h 指明mongo.conf配置的ip（可选）
- -d 指明数据库是哪个
- -c 说明collection名字
- -o 是输出的文件名称（.json、.csv）

其实还有`jsonArray`,`query`等其他高级用法，详情见

    mongoexport --help


## 全库备份（官方工具mongodump解决）

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

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

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

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

以上是我写elf2mongo的动机

现在说说我的解决方案，即elf2mongo

## elf2mongo是神马？

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

readme里我是这样写的

```
elf2mongo = elf for 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 elf2mongo

### Usages

第一步初始化一个配置文件（当前目录生成mongo.config.json），执行

    mmb init

此时，用任何编辑器打开`mongo.config.json`，按需要修改里面的配置文件即可，然后就可以备份数据了：

    mmb

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

### 配置文件说明

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

mongodb服务器配置项

- "host": 127.0.0.1
- "port": 27017
- "username": username
- "password": password
- "db": database name

备份数据目录名称配置项

- "dirname": dirname that generated by momentjs's date format,  see http://momentjs.com/docs/#/parsing/string-format/

说明：    

    "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": "appbricks",
  "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，写一个脚本`mmb_cron.sh`（eg：目前线上用的是这个）

```
➜  mongodbbackup  cat mmb_cron.sh
 #！/bin/bash

source  ~/.bashrc
cd /home/deploy/data-copy
~/.nvm/versions/io.js/v2.2.1/bin/mmb
```

然后,给mmb_cron.sh增加执行权限

```
chmod +x mmb_cron.sh
```

配置crontab，定时执行mmb_cron.sh

```
➜  mongodbbackup  touch cron-mmb.conf
```

填写以下内容

```
49 * * * *  nohup sh /home/deploy/data-copy/mmb_cron.sh >~/cron.log 2>&1 &
```

保存即可。

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

这样每分钟都会执行mmb_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编辑任务


全文完

---
_Source: https://npm.io/package/elf2mongo · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
