MongoDB 权限备份还原去重

Posted itonet

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB 权限备份还原去重相关的知识,希望对你有一定的参考价值。

 

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

    运行:

    运行过程-1

    运行提示-1

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

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

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

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

  5. 更多

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

 

以上是关于MongoDB 权限备份还原去重的主要内容,如果未能解决你的问题,请参考以下文章

mongodb 备份和还原

MongoDB备份与还原

MongoDB数据库的备份恢复

mongodb 备份还原

mongodb的备份和还原

mongodb的备份与还原