1.停掉服务器 然后备份
Mongodb将所有数据都存放在"数据目录(data/db)"下,启动mongoDB时可以用--dbpath指定我们自己设置的数据存储目录
备份: 只需要创建数据存储目录的副本就可以了,直接copy一份。
恢复: 在MongoDB启动时用 --dbpath指定数据存储目录副本的位置。

2.不停服务器 直接备份
1.mongodump和mongorestore
mongodump就是一种能在运行时备份的方法,mongoDB自带这个工具.
mongodump对运行的MongoDB做查询,然后将所有查询到的文档写入磁盘

mongostore是能获取mongodump的输出结果,并将备份的数据插入到运行的MongoDB实例中.mongodb也提供了这个工具
使用示例:
备份:mongodump -h dbhost -d test -o backup (或者 -o D:\test\dump\UserData)
其中:
-h 指定了Mongodb所在服务器的地址 如:127.0.0.1 或者 127.0.1.1:27017
-d 指定了要备份的数据库
-o 指定了备份的位置 此处表示 备份test数据库到与当前mongodump命令同一位置backup目录下

恢复:mongorestore -h dbhost -d foo --drop backup/test   (或者 --drop D:\test\dump\UserData)
	其中:
			-h Mongodb所在服务器地址
			-d 指定了要恢复的数据库,可以将备份的数据库恢复到与原来不同的数据库中,这里为foo
			-drop 表示在恢复前删除集合(若存在).否则,数据就出现与现有集合数据合并,可能会覆盖一些文档.
			-- backup/test 是指备份文件的路径

优势:不用停掉服务器
不足之处:不是实时的快照;
在备份过程中会执行查询,对其他的业务查询会有性能上的影响
2.fsync和锁
原理:
fsync命令会强制服务器将所有缓冲区写入磁盘,还可以选择上锁阻止对数据库的进一步写入,以保证数据
的实时性。直到释放锁为止。
使用:
use admin
db.runCommand({fsync:1,lock:1});
//至此,数据目录的数据就是一致的,且为数据的实时快照。因为上了写入锁,可以保证安全的将数据目录副本用作备份。
db.$cmd.sys.unlock.findOne();
db.currentOp();
//运行db.currentOp(); 是为了确保已经解锁了.
优势:不用停掉服务器
是数据库的时候快照
不足之处:因为备份过程对数据库上了锁,所以会阻塞写入操作。

4、从属备份
当以复制的方式运行MongoDB时,前面提到的备份技术就不仅能用在主服务器上,也可以用在从服务器上;
从服务器的数据几乎和主服务器同步;

在从服务器上备份是MongoDB推荐的备份方式


导出
Mongodb中的mongoexport工具可以把一个collection导出成JSON格式或CSV格式的文件。

mongoexport -h 119.147.53.178 --port 27777 -d UserData -c huodong_zmop_Record  --type=json -o lihao.json


可以通过参数指定导出的数据项,也可以根据指定的条件导出数据

导入
使用mongoimport工具可以把一个csv或者json等之类的文件导入指定集合

例子:导入一个包含有列名的csv文件
	mongoimport -h 192.168.1.87:27017 -d "UserData" -c "huodong_4gzzhk"  --type=csv  --headerline --file=测试.csv