一:导出 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