mongo客户端 mongo客户端工具都用啥
如何用mongodb设计用户权限表
serverStatus返键解释:例如:mysql安装配置好后,有一个自带的mysql数据库,里面有一张user表,用来存放用户,以及用户权限,而mongodb这个最像关系型的数据库,有没有这样的表呢。
mongo客户端 mongo客户端工具都用啥
mongo客户端 mongo客户端工具都用啥
一,掌握权限,理解下面4条基本上就不多
1,mongodb是没有默认账号,所以要先添加addUser第三参数设true.调用addUser必须响应数据库写权限.所数据库调用addUser,账号,在开启权限认证。
2,切换到admin数据库,添加的账号才是账号。
3,用户只能在用户所在数据库登录,包括账号。
二,添加账号
MongoDB shell version: 2.4.6
connecting to: tank
> use admin //切换到admin数据库
switched to db admin
> show collections;
.users //用户表
> db..users.find(); //用户表没有数据
> db.addUser('tank','test'); //添加一个账号
"readOnly" : false,
"pwd" : "988432606980d0695e4f668f6bbc643a",
"_id" : ObjectId("529e5d543b6a4608ac833429")
}三,开启动用户权限认证
[root@localhost zhangy]# vim /etc/mongodb.conf //将auth=true前面的注释拿掉
四,用户只能在用户所在数据库登录,需要通过admin认证后才能管理其他数据库
MongoDB shell version: 2.4.6
connecting to: tank
> show dbs; //显示所有数据库失败,因为还没有认证
Wed Dec 4 06:39:50.925 listDatabases failed:{ "ok" : 0, "errmsg" : "unauthorized" } at src/mongo/shell/mongo.js:46
> db.auth('tank','test'); //认证失败,因为这个用户不属于tank这个数据库
Error: 18 { code: 18, ok: 0.0, errmsg: "auth fails" }
> use admin //切换到admin数据库
switched to db admin
> db.auth('tank','test'); //在admin数据库认证成功
> use tank; //切换到tank数据库
switched to db tank
> show collections; //不会在提示没有权限了
contact
users
五,添加普通用启
> use tank;
switched to db tank
> db.addUser('tank1','test'); //为tank数据库添加了一个可读写用户tank1
{"_id" : ObjectId("529e5f8474b4c660718a70f3"),
"user" : "tank1",
"readOnly" : false,
"pwd" : "35dd47abff098f5b4f0b567db8edeac5"
}> db.addUser('tank2','test',true); //为tank数据库添加了一个只读用户tank2
{"user" : "tank2",
"readOnly" : true,
"pwd" : "17926c544d247538ded52e6df7b887",
"_id" : ObjectId("529e67553992b24438d5e315")
}> exit //退出
byedb.名.find()
MongoDB shell version: 2.4.6
connecting to: tank
> db.auth('tank1','test'); //刚添加的用户可以登录。
六,php客户端连接
1, 方法一
$mongo = new Mongo();
$db = $mongo->selectDB('tank'); //切换到tank数据库
$db->authenticate("tank3", "test"); //认证
$users= $db->selectCollection("users"); //选取users表
$cursor = $users->find(); //读取数据
foreach ($cursor as $id => $value) {
}这种方式比较好理解,根命令行下的作过程不多。
2,方法二
$mongo = new Mongo("mongodb://tank3:test@127.0.0.1:27017/tank"); //认证用户,这里的数据库,只启认证作用
$db = $mongo->selectDB('tank'); //选取数据库
$users= $db->selectCollection("users");
$cursor = $users->find();
foreach ($cursor as $id => $value) {
}上面二种方法的不同在于,一个先选数据库在认证,一个先认证在选数据库。
MongoDB WriteConcern与ReadConcern
{"user" : "tank",客户端在写入数据时,可以通过writeConcern来配置写入策略,其包含如下选项
MongoDB Replset是通过secondary不断拉取primary上的oplog并重放来实现的,那 w:majority 是如何确保写入到大多数的呢?
MongoDB V3.2引入了readConcern来配置读策略,该参数容易与readPreference混淆,两者并不冲突,区别如下:
readConcern设计用于解决读问题,例如客户端先在primary读取了一条数据,但该数据还未同步到大多数就因为primary down引起的Rollback,那客户端在新primary上无法读取到之前的数据,导致客户端发生了读。
readConcern原理
配置 readconcern:majority 需要先确认 replication.enableMajorityReadConcern 参数已经开启。配置该参数后,MongoDB会单独起一个snapshot线程,定期采集数据集的快照,并记录快照对应的oplog时间戳,只有当oplog已经应用到大多数时,show dbs;对应的snapshot才会标记为committed,用户读取就只能读取一个committed状态的快照数据。
关闭readconcern
由于readConcern的snapshot保存在内存中,增加了cache的消耗,对性能存在一定影响,如果需要关闭我们可以设置replication.enableMajorityReadConcern为false,并通过在mongod实例上执行db.serverStatus()查看 storageEngine.supportsCommittedReads
详细内容可参考 Read Concern "ma备份,解锁:jority"
mongodb查询速度慢是什么原因
排除方式八:连接字符串。您好,排除方式一:是不是因为有子文档的原因?
找一个没有任何合同记录的文档查询,发现结果依旧,没有明显的改善;
排除方式二:没有创建索引?
在搜索列ID上创建索引,结果依旧;
一万多行只是小数目,没理由,mongodb管理上千万的文档都是没有问题的,于时还是决定试一试,将记录全部删除,插入一条:数据库test备份backup目录记录然后查询,结果依旧;
排除方式四:是不是由于客户端序列化的问题?
由于我存储的是自定义的对象,不是默认的Document,所以决定尝试直接存储Document,Document就两个字段,获取速度还是需要180ms。
排除方式五:是否由于客户机器是32位,而mongodb服务是64?
将程序放在64位机器上测试,问题依旧。
排除方式六:是否由于网络传输问题?
没道理啊,测试的客户端以及服务端均在同一局域网,但还是尝试将客户端程序直接在mongodb上执行,问题一样;
上面的六种方式都已经尝试过,没有解决,决定求助于老代,毕竟是用过mongodb的高人,给我两个建议就搞定了:
排除方式七:查看m[root@localhost zhangy]# mongoongodb数据文件,看是否已经很大?
s=IP:27017;ConnectTimeout=30000;ConnectionLifetime=300000;MinimumPoolSize=8;MaximumPoolSize=256;Pooled=true
我一看到这个参考字符串,印象是,我的写法和它不一样(string connectionString = "mongodb://localhost"; ),然后发现有两个重要的参数:
1:ConnectionLifetime=300000,从字面意思来看,是说连接的生命周期,而它的数值设置如此大,显然说明此连接不会被立即关闭,这和sql server的做法有所区别;
2ooled=true,从字面意思来看,应该是有连接池的概念。
分析:从上面的连接参数来看,我之前所理解的连接,就是客户端与服务端之间的连接,它需要在使用完之后马上关闭,即客户端与服务端不在有tcp连接。但我没有很好的理解连接池的作用。连接池实际上从存储很多个已经和服务端建立tcp连接的connection,在它的生命周期内一直保持和服务端的连接,生命周期过后会变成失效连接等待回收。
重新修改连接字符串再进行测试,问题解决,只有次请求时,由于需要创建tcp连接,性能会受影响,后面的请求,因为有连接池的存在,性能得到成倍提高。
东方航空到底用MongoDB做了什么,技术选型为何花落MongoDB
关闭也会带来一定的影响,例如:文档存储
数据存储以BSON/JSON文档,这对于Web应用程序有很大的意义。开发者API喜欢以JSON形式传输,这使得整个项目的数据表示可采用统一的模型。所有这一切都无需任何前期架构设计。
2. 可扩展性
MongoDB被用在一些规模庞大的环境中,FourSquare/Craiglist都在使用它。通过分片数据缩放处理理论上可实现更高的吞吐量。
3. 简单的复a.#行注释制
MongoDB以文档的形式存储数据,不支持事务和表连接。因此查询的编写、理解和优化都容易得多。简单查询设计思路不同于SQL模式,嵌入文档在特定的环境下可得到更好的查询,然而这需要先加入。如果需要执行多个请求到数据库则需要加入其到客户端。在MongoDB时ODM工具(如Doctrine2)将发挥自身的优势。
5. 安全性
由于MongoDB客户端生成的查询为BSON对象,而不是可以被解析的字符串,所以可降低受到SQL注入的攻击的危险。最常见的攻击类型为针对Web应用程序的攻击,在MongoDB上使用Doctrine2 ODMs 查询语言可减轻攻击风险。
6. 支持
7. 价格port = 10000
MongoDB是的!
当然远不止这些优势,但是也有很多劣势。
如何在Mongodb中统计去重之后的数据
[root@localhost zhangy]# /etc/init.d/mongod restart //重启生效以这个简单的为例,我们需要中包含多少不同的手机号码,首先想到的应该就是使用distinct关键字,
用户在选择数据库时总是喜欢积极和充满活力的,这点非常重要。MongoDB在业界有非常大的影响力,用户也会定期的组织活动。MongoDB的标签在StackOverFlow是非常活跃的。你永远不会陷入困境,因为总有人与你讨论并解决问题。db.tokencaller.distinct(‘Caller‘).length
如果想查看具体的而不同的手机号码,那么可以省略后面的length属性,因为db.tokencaller.distinct(‘Caller‘)返回的是由所有去重手机号码组成的数组。 但是,这种方式对于所有情况都是满足的嘛?并不如此,如果要统计的记录数较大,如千万级别的,那么在这么统计的时候往往会报10044错误,提示信息“exception : distinct too big , 16mb cap”. 后面我们将通过其他方式进行解决。
另外一种方式可以使用runCommand结合distinct进行使用,
db.runCommand({"distinct":"tokencaller","key":"Caller"}) 可见在values上显示了去重之后的手机号码,,看结果是一个Json格式的,于是尝试了下看看能不能取出values的大小,因为如果对于大数据量的来说,直接显示去重的号码明显不合适,于是尝试了下面的写法:
发现是可以的,于是对大数据量使用了这种方式看看是否能取出结果,发现不存在length属性,想了想应该跟mongodb的客户端版本有关系吧,还待验证!!!
两种方式都不行,于是试了下mapReduce方式,具体如下: 然后我们会发现,他会将查询出来的结果输出到一个称为“callerstatis”的结合,如下所示:
然后使用db.callerstatis.count()就可以知道有多少不同的手机号码了。
使用这种方式,我们同样在大数据量的上试了一下,可惜还是失败了!!!!(桑心T_T),如果有谁有好的方法,麻烦也告诉我一下,小的感激不就像分片技术一样,MongoDB范围内过程同样简单好用,在副本机器上还有大量的选项。灵活的功能可满足用户应用的需求。尽啊^_^如何在Mongodb中统计去重之后的数据
标签:
怎样在linux的shell脚本中连接mongodb插入
echo "$id: "; print_r($value); echo "";
/home/test/mongodb/mongodb-2.2.3/bin/mongo 127.0.0.1:8888
这个是我的数据库配置,没有设置用户名密码。所以直接通过该命令就可以连接。
连结后会有一个默认连接的数据库。
mongodb常用命令:
查看数据库命令:
查看命令:
show collections;
切换数据库:
use databaseName4. 易于查询;
查询数据:
插入数据:
"asserts"统计断言数删除:
db.test.remove();
sql="db.test.insert({name:'test',age:1});"//定义执行的sqlecho "$sql"|/home/test/mongodb/mongodb-2.2.3/bin/mongo 127.0.0.1:8888/test --shell
注意,echo命令中的格式必须这样写,管线命令后面的是是数据库安装地址 然后是ip:端口号,斜线后是数据库名称,--shell表示通过shell交互!
liunx怎么看mongodb已经启动成功
配置文件特点:要先建立好MongoDB 存放数据文件和日志文件的目录,此处建立在/data下: [root@localhost etc]# cd /data/
db.名.insert({name:'test',age:1});mongodb_data mongodb_log
2.在MongoDB安装目录下的bin下使用mongod启动MongoDB,
./mongod --dbpath=/data/mongodb_data/ --logpath=/data/mongodb_log/mongmongodump备份查询其客户端性能产影响.odb.log --logappend&
3.等待启动成功后,可查看是否启动成功了,默认端口号是27017,当然在启动时也可以指定未使用的其它端口。
先通过查看端口号看MongoDB是否启动了。
可以进入mongodb。启动没有报错就安装成功了。
MongoDB配置文件中如何绑定IP?一行设置后,mongo启动不了了,求解决。
排除方式三:是不是文档数量过大?1.启停止MongoDB
执行mongod,启MongoDBmongod选项命令执行 mongod --
主要选项:
--dbpath
实例必须3数据目录mongod启数据库目录创建mongod.lock文件
文件用于防止其mongod纯净使用该数据目录
--port
指定端口号默认端口27017.要运行mongod进程则要给每指定同端口号
--logpath
指定志输路径文件夹读写权限系统文件存创建已文件覆盖掉
清除所原志记录想要保留原志需使用--logappend选项
--config
指定配置文件加载命令行未[root@localhost data]# ls指定各种选项
2.配置文件启
MongoDB支持文件获取配置信息.需要配置非或者要自化MongoDB启用.
指定配置文件用-f或--config选项.
:mongod --config refactorConfig.txt
refactorConfig.txt内容:
#start MongoDB
dbpath = "f:mongodb"
logpath = "f:mongologMongoDB.txt"
rest = true
配置文件命令行功能
mongod --dbpath "f:mongodb" --logpath "f:mongologMongoDB.txt" --rest --port 10000
b.指定选项语种"选项=值"形式.选项区写.
c.命令行--rest关选项,值要设true
3.停止MongoDB
use admin
db.shutdown()
4.
使用管理接口,默认情况,启mongod启基本,该服务默认端口28017.浏览器输入
localhost:28017.些链接需要mongod启,用--rest选项启rest支持 才能进.启rest支持,
mongod启使用--nointece关闭管理接口.
5.serverStatus
要获取运行MongoDB统计信息,基本工具serverStatus命令
db.runCommand({"serverStatus":1})
"globalLock"值表示全局写入锁占用少间(单位微秒)
"mem"包含内存映射少数据,进程虚拟内存驻内存占用情况(单位MB)
"indexCounters"表示B树磁盘检索("misses")内存检索("hits")数.比值始升,要考虑加内存.
"backgroundFlushing"表示台做少fsync及用少间
"opcounters"文档包含每种主要作数
6.mongostat
serverStatus虽强,说容易.MongoDB提供mongostat
mongostat输些serverStatus提供重要信息,每秒输新行,比前看静态数据实性要.
输列,别 inserts/s commands/s vsize %locked,与serverStatus数据相应.
使用第三插件进行数据库.
7.安全认证
认证基础知识
每MongoDB实例数据库都用户,启安全性检查,数据库认证用户才能执行读或写作.
认证文,MongoDB普通数据作admin数据库处理.admin数据库用户称超级用户().
认证,读写所数据库,执行特定管理命令,listDatabasesshutdown.
启安全检查前,至少要帐号,shell连接没启安全检查
面添加refactor_root,test数据库添加两普通账号,其读权限.shell创建读用户要
没启安全检查.
重启数据库,重启加入 --auth 命令行选项,启安全检查
第连接,能test数据库执行任何作,作读用户认证,能查找,能插入数据.能读写用户认证,能查找插入
数据,能使用show dbs 列举所数据库.超级用户认证,所欲.
8.认证工作原理
数据库用户帐号文档形式存储.users.文档结构
{"_id" : ObjectId("5006a037dff37e149322fd83"),
"user" : "refactor_read_write",
"readOnly" : false,
"pwd" : "5a84584ac51d3f702461fce4c46b0d6b"//根据用户名密码散列
}知道用户信息何存储及存储位置,进行管理工作.
删除帐户:
> db..users.remove({"user":"refactor_read"})
> db.auth("refactor_read","refactor")
用户认证,认证连接绑定跟踪认证,说驱程序或工具使用连接池或故障切换
另,所认证用户必须每新连接重新认证.
MongoDB传输协议加密,需加密,用ssh隧道或者类似技术做客户端间加密.
建议MongoDB放防火墙或放应用能访问网络.MongoDB必须能外面访问,
建议使用--bindip选项,指定mongod绑定本ip址.:能本机应用访问,使用
mongod --bindip localhost
默认情况MongoDB启简单,便于查看运行,锁,等面信息,要想公些信息,用
--nointece关闭管理接口.
用--noscripting完全禁止服务端jascript执行
9.1、想在shell中连接数据库,首先要在连接数据的机器上安装mongodb的客户端才可以。客户端的安装在这里不再重复,自己百度一下有教程的。 连接mongodb的命令如下: /home/test/mongodb/mongodb-2.2.3/bin/mongo 127.0.0.1:8888 这个是数据库配置,没有设置用户名密码,所以直接通过该命令就可以连接。 连接后会有一个默认连接的数据库。 2、mongodb常用命令: 查看数据库命令: show dbs; 查看命令: show collections; 切换数据库: use databaseName; 查询数据: db.名.find() 插入数据: db.名.insert({name:'test',age:1}); 删除: db.test.remove(); 3、如果想通过shell脚本实现一个日志分析并入库的作,命令如下: sql="db.test.insert({name:'test',age:1});"//定义执行的sqlecho "$sql"/home/test/mongodb/mongodb-2.2.3/bin/mongo 127.0.0.1:8888/test --shell 注意,echo命令中的格式必须这样写,管线命令后面的是是数据库安装地址 然后是ip:端口号,斜线后是数据库名称,--shell表示通过shell交互备份修复
MongoDB所数据都存放 数据目录 ,默认目录C:datadb.启MongoDB候用--dbpath指定数据目录.
论数据目录哪,都存放着MongoDB所数据.要想备份MongoDB,要简单数据目录所文件即.
除非做完整fsync,允许写入,否则运行MongoDB创建数据目录副本并安全,备份能已经
破损,需要修复.
运行MongoDB创建数据目录副本并安全,所先关,再数据目录.关闭数据库要停止业务.
10.mongodumpmongorestore
mongodump种能运行备份.mongodump运行MongoDB做查询,所查文档写入磁盘.
mongodump般客户端,所供运行MongoDB使用,即便处理其请求或执行写入没问题.
mongodump使用普通查询机制,所产备份定数据实快照.备份程处理写入,非明显.
mongodump -- 获帮助
mongorestore备份恢复数据工具.
mongorestore获取mongodump 输结,并备份数据插入运行MongoDB实例.
mongodump -d test -o backup
使用mongorestore 恢复testNew 数据库
mongorestore -d testNew --drop backup/test/
-d指定要恢复数据库.--drop指恢复前删除(若存),否则数据与现数据合并,能覆盖些文档.
使用mongorestore --获帮助信息
11.fsync锁
虽使用mongodumpmongorestore能停机备份,却失获取实数据视图能力.MongoDBfsync命令
能MongoDB运行数据目录损坏数据.
fsync命令强制所缓冲区写入磁盘.选择锁住址数据库进步写入,知道释放锁止.写入锁让
fsync备份发挥作用关键.
shell,强制执行fsync并获写入锁:
db.runCommand({"fsync":1,"lock":1})
,数据目录数据致,且数据实快照.锁,安全数据目录副本作备份.要数据库运行
快照功能文件系统,比LVM,EBS,用,拍数据库目录快照快.
db.$cmd.sys.unlock.findOne()
db.currentOp()
运行db.currentOp()确保已经解锁(初请求解锁花点间)
fsync命令,能非灵备份,用停掉,用牺牲备份实性能.要付代价些写入作
暂阻塞.唯耽误读写能保证实快照备份式通备份.
12.属备份
虽面备份式灵,都没备份.式运行MongoDB,前面提备份技术仅能用
主,用.数据几乎与主同步.太乎属性能或者能能读写,
于能随意选择面3种备份式:关停,转存或恢复工具或fsync命令.备份MongoDB备份式.
13.修复
MongoDB存储式能保证磁盘数据能用,能损毁.MongoDB内置修复功能试着恢复损坏数据文件.
未停止MongoDB应该修复数据库.修复数据库式简单 mongod --repair 启.
修复数据库实际程简单:所文档导马导入,忽略效文档.完,重建索引.数据量,花间,
所数据都要验证,所索引都要重建(MongoDB 1.8 版本引入志系统,使修复间打打缩短).
修复能比修复前少些文档,损坏文档删除.
修复数据库能起压缩数据作用.闲置控件(删除体积较,或删除量文档腾空间)修复重新利用.
修复运行数据库,要shell用repairDatabases.
use test
db.repairDatabase()
为什么 MongoDB 连接数被用满了
想在shell中连接数据库,首先要在连接数据的机器上安装mongodb的客户端才可以。客户端的安装在这里不再重复,自己百度或者google一下吧。连接mongodb的命令如下:使用 MongoDB 时,可能会遇到因为 mongod 连接数用满了,导致客户端无法连接的问题。mongod的连接4,可以管理所有数据库,但是不能直接管理其他数据库,要先在admin数据库认证后才可以。这一点比较怪数通过 net.maxIncomingConnections 指定,默认值为1000000,相当于没有限制,生产环境强烈建议根据实际需求配置,以避免客户端误用导致 mongod 负载过高。
经查看,总大小才64M,这比32位文件上限的2G来讲,可以基本忽略;怎样在linux的shell脚本中连接mongodb插入
使用shutdown命令{"shutdown":1},命令要admin数据库使用.shell提供辅助函数:方法/步骤
.indexes/home/test/mongodb/mongodb-2.2.3/bin/mongo 127.0.0.1:8888
这个是我的数据库配置,没有设置用户名密码。所以直接通过该命令就可以连接。
连结后会有一个默认连接的数据库。
mongodb常用命令:
查看数据库命令:
查看命令:
show collections;
切换数据库:
use databaseName;
查询数据:
插入数据:
删除:
db.test.remove();
如果我想通过shell脚本实现一个日志分析并入库的作怎么办呢?简单,如下作就可以:
sql="db.test.insert({name:'test',age:1});"//定义执行的sqlecho "$sql"|/home/test/mongodb/mongodb-2.2.3/bin/mongo 127.0.0.1:8888/test --shell
注意,echo命令中的格式必须这样写,管线命令后面的是是数据库安装地址 然后是ip:端口号,斜线后是数据库名称,--shell表示通过shell交互。指定数据目录默认值C:datadb每mongod进程都需要数据目录要3mongod
版权声明:图片、内容均来源于互联网 如有侵权联系836084111@qq.com 删除