mongodb数据管理

数据的导出、数据导入
数据导出 mongoexport [使用mongoexport -h查看参数] 
数据导入 mongoimport [使用mongoimport -h查看参数]

导入导出json数据实例

 
mongoexport -d mydb -c user -o d:/mongdbback/user.dat
--mydb是要导出的表所属的数据库
--user是要导出的集合名c表示collection
--user.dat是导出后的文件名 mongoimport -d mydb -c user d:/mongdbback/user.dat
--mydb 数据导入的目标数据库
--user 数据导入的目标集合
--d:/mongdbback/user.dat 待导入的数据文件存放路径
 

导入导出csv数据

CSV格式良好,主流数据库都支持导出为csv的格式,所以这种格式非常利于异构数据迁移.

 
mongoexport -d mydb -c user --csv -f  id,name,age  -o d:/mongodbback/user_csv.data
--导出csv格式
--f 指定要导出的列的名字 mongoimport -d mydb -c user --type csv --headerline --file d:/mongodbback/user_csv.data;
--mydb 数据导入的目标数据库
--user 数据导入的目标集合
--type表示导入的文件格式
--headerline 表明不导入第一行,因为第一行是列名
--d:/mongodbback/user_cvs.data 待导入的数据文件存放路径
 

数据备份、数据恢复
数据备份mongodump
数据恢复mongorestore

 
备份实例
mongodump -d mydb //备份mydb数据库
此时会在当前目录下默认创建一个dump目录,用于存放备份出来的文件,也可以指定备份存放的目录使用-o
mongodump -d mydb -o d:/databack/ 恢复实例
mongorestore -d mydb d:/databack/mydb/ 数据备份是为了发生灾难事件后可以恢复数据,但是不幸总是存在的,即没有数据备份,好在MongoDB内建了修复功能.可以尝试修复受损文件,如果Mongdb不正常关闭,启动服务时会看到一堆警告信息.
修复所有数据最简单的方法就是在mongod启动时加上--repaire参数.
修复单个数据库可以再mongodb的shell里边执行repaireDatabase命令,如
>use test
switched to db test
>db.repaireDatabase();
{“ok” : 1}
 

克隆collection

克隆collection是将一组数据从一个数据源拷贝到多个数据源的技术,是将一份数据发布到多个存储站点上的有效方式.

 
远程克隆
例如,将192.168.1.32上test下的user集合克隆到本地
db.runCommand({cloneCollection:”test.user”, from:”192.168.1.32:27017”});
本地克隆
由于mongoDB没有提供本地克隆collection的命令或方法,所以需要写一个循环插入的方案来完成这项工作.
例如,将user集合中的数据克隆一份到taruser中.
> db.user.find().forEach( function(x){ db.taruser.insert(x); } );
> db.taruser.find();
 

复制数据库

使用copyDatabase(fromdb,todb,fromhost)命令来实现复制数据库

远程复制数据库
> db.copyDatabase("from_db1","to_db2","192.163.1.167");
本地复制数据库
> db.copyDatabase("to_db1","to_db2","localhost");

刷新磁盘

在mongoDB中使用”db.runCommand({fsync:1})”命令将内存中尚未写入磁盘的信息写入磁盘,并锁住对数据库更新的操作,但读擦做可以继续.

数据压缩

repairDatabase命令是MongoDB内置的一个方法,调用这个方法MongoDB会扫描数据库中的所有数据,并将通过导入/导出来重新整理数据,整理磁盘碎片

mongoDB中可以使用db.collection.storageSize()和db.collection.totalSize()命令来搜集压缩命令执行前后集合所占用磁盘空间情况

 
> db.user.storageSize();
8192
> db.user.totalSize();
16384
> db.repairDatabase();
{ "ok" : 1 }
> db.user.storageSize();
8035
> db.user.totalSize();
9384
 

捕获异常

MongoDB的写是异步的,返回给客户端成功但写不一定成功,db.getLastError命令有2个功能,即当MongoDB在写操作时,默认不会等数据写完后才返回,这是可以通过这个命令来保证写入是否是成功的.

查看活动进程

 
> db.currentOp();
字段说明:
opid:操作进程号,可以使用db.killop(opid)
op:操作类型(查询、更新等)
ns:命名空间,指操作的是哪个对象
query:如果操作类型是查询的话,将显示具体的查询内容
inLock:指名锁定的类型.-1代表读锁,0代表无锁.1代表写锁.
 

用户安全和认证

限制特定IP地址访问

这样可以避免来自公网上的恶意攻击.

MongDB可以指定对外服务的绑定,默认设置为空,即绑定在本机所有可用IP上,对于商业系统,出于安全考虑,可以绑定内网,减少外网访问避免攻击.
只需要启动时加bind_ip即可.
>mongod --bind_ip 169.254.180.132 //启动mongodb时绑定ip169.254.180.132
此时客户端想访问169.254.180.132上的服务器,就需要显示地指定连接的IP地址是169.254.180.132.
eg. >mongo 169.254.180.132

设置监听端口

MongoDB默认的监听端口是27017,为了安全,一般都会修改这个监听端口.

eg.    >mongod --bind_ip 169.254.180.132 --port 9888    //启动mongodb时绑定ip 并修改端口
同理.客户端连接时需要指定ip跟端口
eg. >mongo 169.254.180.132:9888

设置登录用户名和口令

mongodb默认是没有用户名和口令的,启动后,可以直接用mongoDB连接,并且对所有的库具有root权限,为了安全,必须给其设置用户名和口令.

只需要再启动的时候,指定auth参数.就可以阻止客户端的访问和连接,如下

eg.>mongod -auth --dbpath=../data --logpath=../logs/mongodb.logs

想要登录验证模块生效,必须在admin库中添加一个用户,同时要指定auth参数.

 
D:\program files\mongo\bin>mongo
MongoDB shell version: 1.8.1
connecting to: test
> use admin
switched to db admin
> db.addUser("root","root123");
{
"user" : "root",
"readOnly" : false,
"pwd" : "81c5bca573e01b632d18a459c6cec418"
}
> db.auth("root","root123");
1
>
此时建立了系统root用户.
 

也可以对某个特定的数据库设置用户,这样权限的细粒度划分,也方便进行用户管理.

注意:建立指定权限的用户只能用系统用户来操作.

为mydb创建一个用户名为mydbusr口令为123的用户

 
D:\program files\mongo\bin>mongo -uroot -proot123 localhost:27017/admin
MongoDB shell version: 1.8.1
connecting to: localhost:27017/admin
> show dbs;
admin 0.03125GB
local (empty)
test (empty)
> use mydb;
switched to db mydb
> db;
mydb
> db.addUser("mydbusr","123");
{
"user" : "mydbusr",
"readOnly" : false,
"pwd" : "4dbfed60224bbcd7eccbd2da993a8029"
}system
> show tables;
system.indexes
.users
> db.system.users.find();
{ "_id" : ObjectId("50f6acdd22bc514e46426dda"), "user" : "mydbusr", "readOnly" : false,
60224bbcd7eccbd2da993a8029" }
> db.auth("mydbusr","123");
1
>
 

mongodb管理与安全认证的更多相关文章

  1. MongoDB安全及身份认证

    前面的话 本文将详细介绍MongoDB安全相关的内容 概述 MongoDB安全主要包括以下4个方面 1.物理隔离 系统不论设计的多么完善,在实施过程中,总会存在一些漏洞.如果能够把不安全的使用方与Mo ...

  2. 详解MongoDB管理命令

    MongoDB是一个NoSQL数据库系统:一个数据库可以包含多个集合(Collection),每个集合对应于关系数据库中的表:而每个集合中可以存储一组由列标识的记录,列是可以自由定义的,非常灵活,由一 ...

  3. MongoDB管理

    前几篇文章都是从开发和使用的角度了解了MongoDB的各个知识点,这篇文章将从MongoDB管理的角度入手,了解MongoDB管理所要了解的基本知识. 数据库命令 在前面几篇文章中,已经接触了一些数据 ...

  4. 【九】MongoDB管理之安全性

    要保证一个安全的MongoDB运行环境,DBA需要实施一些控制保证用户或应用程序仅仅访问它们需要的数据.这些措施包括但不限于: 认证机制 基于角色的访问控制 加密 审计 一.认证机制 认证是验证客户端 ...

  5. MongoDB 副本集+分片 认证方式搭建

    MongoDB 副本集+分片 认证方式搭建 参考资料: https://www.cnblogs.com/ityouknow/p/7344005.htmlhttps://jorwen-fang.itey ...

  6. MongoDB管理工具的插件系统

    MongoDB管理工具  MongoCola的开发已经进入第三个年头了. 官方对于C#驱动的投入不够导致了很多东西都必须自己实现,但是不管怎么样,工具现在已经很强大了. 最近准备着手插件系统的开发,简 ...

  7. MongoDB管理与开发精要 书摘

    摘自:<MongoDB管理与开发精要>         性能优化 创建索引 限定返回结果条数 只查询使用到的字段,而不查询所有字段 采用capped collection 采用Server ...

  8. mongodb管理工具rockmongo

    mongodb的图像管理工具非常之多,我用的是rockmongo. RockMongo 是一个PHP5写的MongoDB管理工具. 主要特征: 使用宽松的New BSD License协议 速度快,安 ...

  9. Nodejs mongodb 管理组件adminmongodb

    强大的 nodejs的mongodb管理工具,强大到即下即用: 安装需求: 1.git命令获取组件包,git clone https://github.com/mrvautin/adminMongo. ...

随机推荐

  1. python 生成器和各种推导式

    ##################################总结############################### 什么是迭代器? 可迭代对象通过__iter__()可以转换成迭代 ...

  2. Kafka技术内幕 读书笔记之(五) 协调者——协调者处理请求

    消费者客户端使用“消费者的协调者对象”( ConsumerCoordinator )来代表所有和服务端协调者节点有关的请求处理,比如心跳请求.获取和提交分区的偏移量(自动提交任务).发送“加入组请求” ...

  3. js方法参数中含有单引号双引号的处理

    最近在做项目时,遇到一个问题.当在js脚本中,拼接生成一个tr,然后添加到一个表格里. //假定testval是从后台传过来的数据 var testval = "含有'半角单引号的字符串&q ...

  4. HDU - 6311 Cover(无向图的最少路径边覆盖 欧拉路径)

    题意 给个无向图,无重边和自环,问最少需要多少路径把边覆盖了.并输出相应路径 分析 首先联通块之间是独立的,对于一个联通块内,最少路径覆盖就是  max(1,度数为奇数点的个数/2).然后就是求欧拉路 ...

  5. hdu 5179 beautiful number(数位dp)

    原题链接 题意:求[l,r]中高位%低位等于0的数字个数.(不含0)分析:此题有三种方法.1.暴搜,毕竟最多才10个位.2.数位dp,预处理好整体的,再处理细节. dp[i][j]表示第i位上的数字位 ...

  6. Golang入门教程(十三)延迟函数defer详解

    前言 大家都知道go语言的defer功能很强大,对于资源管理非常方便,但是如果没用好,也会有陷阱哦.Go 语言中延迟函数 defer 充当着 try...catch 的重任,使用起来也非常简便,然而在 ...

  7. 让Windows Server 2008r2 IIS7.5 ASP.NET 支持10万并发请求

    由于之前使用的是默认配置,服务器最多只能处理5000个同时请求,今天下午由于某种情况造成同时请求超过5000,从而出现了上面的错误. 为了避免这样的错误,我们根据相关文档调整了设置,让服务器从设置上支 ...

  8. [Android] Android ViewPager 中加载 Fragment的两种方式 方式(一)

    Android ViewPager 中加载 Fragmenet的两种方式 一.当fragment里面的内容较少时,直接 使用fragment xml布局文件填充 文件总数 布局文件:view_one. ...

  9. Android的Device File Explorer刷新文件

    不知道为什么,右键点sync不起作用,必须点一下列表中的设备,才可以.

  10. C++ vector和list的主要用法区别

    vector可以直接通过下标访问,list不可以 1.vector ; i < userTypes.size(); i++) { str = userTypes[i].typeName; } 2 ...