MongoDB权限控制及备份与恢复

原创 zhaoliang  2015-03-29 16:03  阅读 1,238 views 次

MongoDB安装成功之后,默认没有权限限制,只要使用ip地址就能够连接使用了,只是学习或者测试使用没有问题,如果在正式的生产环境使用mongo同时又没有采取相关的限制措施,那你的mongo数据可就危险了。

遇到这种情况,又不方便增加其它的防护措施(如防火墙限定),那就只剩下给mongo数据库增加授权以保护我们的数据了。注意此处操作的是2.x版本的mongodb。

(一)安全管理

1、以安全认证模式启动

命令行切换至MongoDB的安装路径下D:\mongodb\,执行命令

bin\mongod --auth --dbpath D:\mongodb\data --logpath D:\mongodb\logs\log

2、添加用户

连接至mongo数据库,分次执行以下几条命令

>use admin;
switched to db admin
>db.addUser("root", "root");
{
     "_id" : ObjectId("55420d79e67ba75a33b6ed93"),
     "user" : "root",
     "readOnly" : false,
     "pwd" : "2a8025f0885adad5a8ce0044070032b3"
}

3、安全认证

db.auth("root", "root");
数据库安全认证。认证成功显示结果:
{ "user" : "admin", "readOnly" : false, "pwd" : "995d2143e0bf79cba24b58b3e41852cd" }
如果是认证用户,执行某些命令,可以看到正确执行结果,如下所示:
db.system.users.find()
{ "_id" : ObjectId("4ef940a13c1fc4613425acc8"), "user" : "admin", "readOnly" : false, "pwd" : "995d2143e0bf79cba24b58b3e41852cd" }
否则,认证失败,则执行相关命令会提示错误:
db.system.users.find()
error: { "$err" : "unauthorized db:admin lock type:-1 client:127.0.0.1", "code" : 10057 }

4、为数据库写数据(同步到磁盘)加锁

db.runCommand({fsync:1,lock:1})
说明: 该操作已经对数据库上锁,不允许执行写数据操作,一般在执行数据库备份时有用。执行命令,结果示例如下:
{
"info" : "now locked against writes, use db.$cmd.sys.unlock.findOne() to unlock",
"ok" : 1
}

5、查看当前锁状态

db.currentOp()
说明:
查询结果如下所示:
{ "inprog" : [ ], "fsyncLock" : 1, "info" : "use db.$cmd.sys.unlock.findOne() to terminate the fsync write/snapshot lock" }

其中,fsyncLock为1表示MongoDB的fsync进程(负责将写入改变同步到磁盘)不允许其他进程执行写数据操作

6、解锁

use admin
db.$cmd.sys.unlock.findOne()
说明: 执行解锁,结果如下所示:
{ "ok" : 1, "info" : "unlock requested" }
可以执行命令查看锁状态:
db.currentOp()
状态信息如下:
{ "inprog" : [ ] }
说明当前没有锁,可以执行写数据操作。

(二)数据备份、恢复与迁移管理

1、备份全部数据库

mkdir testbak
cd testbak
mongodump

说明:默认备份目录及数据文件格式为./dump/[databasename]/[collectionname].bson

2、备份指定数据库

mongodump -d pagedb
说明:备份数据库pagedb中的数据。

3、备份一个数据库中的某个集合

mongodump -d pagedb -c page
说明:备份数据库pagedb的page集合。

4、恢复全部数据库

cd testbak
mongorestore --drop

说明:将备份的所有数据库恢复到数据库,--drop指定恢复数据之前删除原来数据库数据,否则会造成回复后的数据中数据重复。

5、恢复某个数据库的数据

cd testbak
mongorestore -d pagedb --drop
说明:将备份的pagedb的数据恢复到数据库。

6、恢复某个数据库的某个集合的数据

cd testbak
mongorestore -d pagedb -c page --drop
说明:将备份的pagedb的的page集合的数据恢复到数据库。

7、向MongoDB导入数据

mongoimport -d pagedb -c page --type csv --headerline --drop < csvORtsvFile.csv

说明:将文件csvORtsvFile.csv的数据导入到pagedb数据库的page集合中,使用cvs或tsv文件的列名作为集合的列名。需要注意的是,使用--headerline选项时,只支持csv和tsv文件。

--type支持的类型有三个:csv、tsv、json
其他各个选项的使用,可以查看帮助:

8、从向MongoDB导出数据

mongoexport -d pagedb -c page -q {} -f _id,title,url,spiderName,pubDate --csv > pages.csv
说明:将pagedb数据库中page集合的数据导出到pages.csv文件,其中各选项含义:
-f 指定cvs列名为_id,title,url,spiderName,pubDate
-q 指定查询条件

本文地址:http://blog.58cm.cn:8088/archives/22.html
版权声明:本文为原创文章,版权归 zhaoliang 所有,欢迎分享本文,转载请保留出处!

评论已关闭!