码迷,mamicode.com
首页 > 数据库 > 详细

MongoDB 权限、备份、还原、去重

时间:2017-08-31 19:12:38      阅读:296      评论:0      收藏:0      [点我收藏+]

标签:mat   工具   指定   完成   index   字段   uname   文档   sha   

 

MongoDB 权限、备份、还原、去重

  1. 权限

    数据安全是数据库至关重要的一部分,那么下面是设置MongoDB的用户权限的大致过程。

    首先,在无授权模式下新建数据库管理员:

    启动数据库服务:

    mongod
    

    启用命名行工具:

    mongo
    use admin
    db.createUser({user:"gly",pwd:"P@ssword",roles:[{role:"userAdminAnyDatabase",db:"admin"}]})
    

    然后,为指定数据库新建用户:

    db.createUser({user:"testdb",pwd:"P@ssword",roles:[{role:"readWrite",db:"testdb"},{role:"userAdmin",db:"testdb"},{role:"dbAdmin",db:"testdb"}]})
    

    最后,在授权模式下访问数据:

    mongod -auth
    

    启用命名行工具:

    mongo
    use testdb
    db.auth("testdb","P@ssword")
    db.CompanyCards.find({}).limit(1)
    
    注意:

    ? 设置密码时,字符中尽量不要使用‘@’,否则在配置数据库连接字符串时会无法正常连接,比如连接字段串mongodb://testdb:P@ssword!@139.219.231.46:27017/testdb?authSource=testdb ,‘@’作为数据库用户名:密码与数据库主机地址之间的分隔符,故不能使用’@’;正确的连接字符串可以配置为:mongodb://testdb:Password!@139.219.231.46:27017/testdb?authSource=testdb 。以上连接字符串中数据和用户名称都为testdb。

  2. 备份(导出)
    命令:
    mongoexport -u UName -p P@ssword -h 127.0.0.1:27017 -d DBName -c CName --type csv -o C:\DBak\CName_201708.csv -f Name,Code,Status
    
    解译:

    数据导出工具 mongoexport

    运行:

    技术分享

    技术分享

    结果:

    执行耗时:约18分钟;导出数据: 68,668,050 条;导出文件:4,159,994KB;测试服务器:2核8G。

    导出的文件数据示例:

    技术分享

  3. 还原(导入)
    命令:
    mongoimport -h 127.0.0.1:27017 -d DBName -c CName --type csv --file C:\DBak\CName_20170800.csv -u UName -p P@ssword --fields Name.string(),Code.string(),Status.int32() --columnsHaveTypes
    

    在导入时,我显示指定了Document的Fields,而对于导出的数据,我不想要第一行,因为它是标题行。那么有两种方法:一,直接导入,然后删除;二,删除标题,然后导入。

    方法一:技术分享

    方法二:技术分享

    解译:

    数据导入工具 mongoexport

    运行:

    技术分享

    技术分享

    结果:

    执行耗时:约27分钟;导入数据: 68,668,050 条;导入文件:4,227,053KB;测试服务器:2核8G。

  4. 去重
    索引:
    use testdb
    db.auth("testdb","P@ssword")
    db.CompanyCards.createIndex( { Name: 1 } )
    
    命令:
    db.CompanyCards.aggregate([{ $group: { _id: {Name: ‘$Name‘}, count: {$sum: 1}, dups: {$addToSet: ‘$_id‘}}},{ $match: {count: {$gt: 1}}}],{ allowDiskUse: true }).forEach( function(doc){ doc.dups.shift(); db.CompanyCards.remove({_id: {$in: doc.dups}});});
    

    注意:因为我们操作的数据集合比较大,所以允许使用磁盘存储 allowDiskUse:true

    运行:

    技术分享

    技术分享

    因为耗时比较长,所以就不写结果了。

    以下数据是我之前做的测试结果,提供参考:

    ? 去重前:1263765 条
    ? 去重后:1258414 条
    ? 总耗时:53.151 s
    ? 过滤掉:5351 条

    ? 笔记本:4核8G,i5处理器。

  5. 更多

    更多操作请参见MongoDB官方在线文档 MongoDB Documention

 

MongoDB 权限、备份、还原、去重

标签:mat   工具   指定   完成   index   字段   uname   文档   sha   

原文地址:http://www.cnblogs.com/itonet/p/7459346.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!