MongoDB导入、导出、备份、恢复

一:导出  mongoexport  

mongoexport --help可以查看mongodb导出的所有参数(linux下用./mongoexport --help),若指定为csv格式的可以加上参数--csv

 常用参数:

-h host  主机

-port port 端口

-u username  用户名

-p passwd  密码

-d  库名

-c  表名       必填的参数,只有存在的表名才有可能导出数据

-f  'field1,field2' 列名  注意json导出实际还会加上'_id'字段

-q  查询条件

-csv 导出格式

-o 导出文件名

eg1: 

./mongoexport -h 127.0.0.1 --port 27017 -u test -p aaaaaa -d test -c user -f 'age,sex' -q '{age:{$lte:20}}' --type json -o user.json   

eg2:

./mongoexport -h 127.0.0.1 --port 27017 -u test -p aaaaaa -d test -c user -f 'age,sex' -q '{age:{$lte:20}}' --type csv -o user.csv

 eg3: 未开启认证的导出  

 mongoexport -d ichpms -c user -o E:/user.json  导出ichpms中的user集合到E盘根目录下的user.json文件

 

注意:mongoexport  一次只能导出一个collection,且只导出了collection的数据,collection对应的索引信息没有导出来。

 

 

 

二:导入    mongoimport

 常用参数:

-h host  主机

-port port 端口

-u username  用户名

-p passwd  密码

-d  库名

-c  表名       必填的参数,不存在的表名直接写入数据,存在的表名追加记录。

--type   被导入的文件类型,默认是json,非json格式的都需要明确指定

--headerline  使用第一行作为字段名(只有导入csv格式才能使用,且不能和-f参数同时使用)

--file   导入的文件名

json 格式的导入

eg1:

./mongoimport -h 127.0.0.1 --port 27017 -u test -p aaaaaa -d test -c userjson --type json --file ./user.json

eg2:    未开启认证的导入

mongoimport -d testdb -c user --file E:/user.json  将  E:/user.json  文件导入到testdb数据库中的user集合中去。

 

cvs格式的导入

csv格式导入时必须申明格式是csv格式,必须指定--headerline参数,且不能使用-f参数 

eg1:

./mongoimport -h 127.0.0.1 --port 27017 -u test -p aaaaaa -d test -c usercsv --headerline --type csv --file ./user.csv

 

 注意:mongoimport  一次只能将一个文件导入到一个指定集合中去,由于数据文件中不可能有索引,所以经过mongoexport和mongodbimport后索引信息被丢失了。 

 

 

 

三:备份  mongodump   备份的是二进制文件,效率高,连索引信息一起备份出来了。

每个collection备份出两个文件,一个是二进制.bson格式的数据文件,.json格式的索引文件。

mongodump --help 可以再mongodb中看到所有的参数(linux下用./mongodump --help)

常用参数:

-h host  主机

-port port 端口

-u username  用户名

-p passwd  密码

-d  库名

-c  表名   可选参数     默认是导出所有collection

-o  备份的文件路径  可选参数,默认是当前路径下的dump文件夹中

eg1:

./mongodump -h 127.0.0.1 --port 27017 -u test -p aaaaaa -d test    #备份整个test数据库

eg2:

./mongodump -h 127.0.0.1 --port 27017 -u test -p aaaaaa -d test -c user     #只备份test数据库的user集合

MongDB运行时备份(导出)指定数据库:

切换到bin目录下

./mongodump -h 127.0.0.1  -u root -p aaaaaa -d ichpms -o /data/userdata/

 参数说明:

-h ip地址  -u 用户 -p 密码   -d 数据库  -o导出数据库存储的文件的路径

 

将导出的数据库文件压缩成zip文件

zip -p -r ichpms.zip /data/userdata/ichpms

 注意:若导出过程中报下面错误:

assertion: 18 { code: 18, ok: 0.0, errmsg: "auth fails" }  

step1:检查要导出的数据库是否存在。

step2:当数据库存在还报这个错误进入数据库之后执行  db.addUser('root','aaaaaa')

step3:若是Shell版本问题那就xxxxxx

四:恢复  mongorestore

恢复二进制文件到指定数据库  效率高

mongorestore --help 可以再mongodb中看到所有的参数(linux下用./mongorestore --help)

常用参数:

-h host  主机

-port port 端口

-u username  用户名

-p passwd  密码

-d  库名

--dir    要恢复的文件路径

--drop   在导入集合之前如果数据库中已存在集合,则会先将已存在的集合删除。注意不会先删除数据库。

--authenticationDatabase  认证的数据库名    (-u  -p 对应的数据库) 

 

eg1:关闭认证的恢复

./mongorestore -h 127.0.0.1 --port 27017  -d testrestore1 --dir ./dump/test

eg2:开启认证的恢复(其它数据库认证恢复)

 ./mongorestore -h 127.0.0.1 --port 27017 -u root3 -p aaaaaa --authenticationDatabase admin -d testrestore2 --dir ./dump/test

eg3:开启认证的恢复(本数据库认证恢复)

use admin

db.auth('root3','aaaaaa');  先认证超级管理员用户

use testrestore3

db.createUser({

    user:'u1',

    pwd:'aaaaaa',

    roles:['readWrite']

});

db.logout();

db.auth('u1','aaaaaa');

./mongorestore -h 127.0.0.1 --port 27017 -u u1 -p aaaaaa -d testrestore3 --dir ./dump/test

 

 

MongDB运行时恢复(导入)到指定数据库:

2.x 下的导入方式

./mongorestore -h 127.0.0.1:27017 -d ichpms --directoryperdb /data/userdata/ichpms --drop     将指定路径下的文件导入到ichpms数据库中去,若数据库不存在会创建数据库。--drop表示在导入之前先删除数据库中的所有集合

3.x 下的导入方式

mongorestore -h 192.168.10.15:27017 -u user-p password --authenticationDatabase=databaseName -d cms3 --dir=/data/dbdata/cms3 --drop

192.168.10.15 要恢复到的数据库的ip  

 databaseName  认证 -u user-p password用户信息的数据库名称。

导入、导出、备份、恢复总结:mongoexport和mongoimport 可以跨版本进行,而mongoredump和mongorestore可能会因为MongoDB数据库版本的问题导致BSON文件格式不同导致无法恢复。

克隆本地的collection

db.source_collection.find().forEach(function(x){db.target_collection.insert(x)});

将source_collection中的数据复制一份到target_collection。

克隆本地的数据库

db.copyDatabase("source_db","target_db","localhost");

将source_db数据库复制到本地,并重新命名为target_db

远程克隆Collection

远程克隆数据库( 将指定ip上的fromDB数据库复制一份存到本地为toDB):

格式:copyDatabase(fromdb,todb,fromhost[,username,password])

fromdb:源数据库名称

todb:目标数据库名称

fromhost:源数据库地址,本地和远程都可以

username:远程数据库用户名

password:远程数据密码

db.copyDatabase("fromDB","toDB","192.168.10.10")       192.168.10.10是fromhost

 

 

 

 

 

 

猜你喜欢

转载自wangshirufeng.iteye.com/blog/2264829