当前位置:数据库 > mongodb >>

MongoDB---管理简析


MongoDB---管理简析
 
1.启动和停止MongoDB
执行mongod,启动MongoDB服务器。mongod有很多选项,在命令中执行 mongod --help
主要选项如下:
--dbpath  www.zzzyk.com  
指定数据目录,默认值是C:\data\db。每个mongod进程都需要独立的数据目录。如果要是有3个mongod
实例,那么必须有3个独立的数据目录。当mongod启动时,会在数据库目录中创建mongod.lock文件
这个文件用于防止其他的mongod纯净使用该数据目录。
--port
指定服务器监听的端口号,默认端口27017.要运行多个mongod进程,则要给每个指定不同的端口号。
--logpath
指定日志的输出路径。如果对文件夹有读写权限,系统会在文件不存在时创建它。它会将已有文件覆盖掉,
清除所有原来的日志记录。如果想要保留原来的日志,需使用--logappend选项。
--config
指定配置文件,加载命令行未指定的各种选项。
 
2.从配置文件启动
MongoDB支持从文件获取配置信息.当需要配置非常多或者要自动化MongoDB的启动时会用到.
指定配置文件可以用-f或--config选项.
如:
mongod --config refactorConfig.txt
refactorConfig.txt内容如下:
#start MongoDB  www.zzzyk.com  
port = 10000
dbpath = "f:\mongo\db"
logpath = "f:\mongo\log\MongoDB.txt"
rest = true
配置文件和命令行的功能一样
mongod --dbpath "f:\mongo\db" --logpath "f:\mongo\log\MongoDB.txt" --rest --port 10000
配置文件的特点:
a.以#开头的行是注释
b.指定选项的语法是这种"选项=值"的形式.选项是区分大小写的.
c.命令行如--rest的开关选项,值要设为true
 
3.停止MongoDB
可以使用shutdown命令{"shutdown":1},这个命令要在admin数据库下使用.shell还提供了辅助函数:
use admin
db.shutdownServer()
 
4. 监控
使用管理接口,默认情况下,启动mongod会启动基本的http服务器,该服务的默认端口是28017.可以在浏览器中输入
localhost:28017.有些链接需要在mongod启动时,用--rest选项开启rest支持 才能进去.当开启rest支持后,可以
在mongod启动时使用--nohttpinte易做图ce来关闭管理接口.
 
5.serverStatus
要获取运行中的MongoDB服务器统计信息,最基本的工具是serverStatus命令
db.runCommand({"serverStatus":1})
serverStatus返回的键解释:
"globalLock"的值表示全局写入锁占用了服务器多少时间(单位微秒)
"mem"包含服务器内存映射了多少数据,服务器进程的虚拟内存和常驻内存的占用情况(单位MB)
"indexCounters"表示B树在磁盘检索("misses")和内存检索("hits")的次数.如果这个比值开始上升,就要考虑加内存了.
"backgroundFlushing"表示后台做了多少次fsync以及用了多少时间
"opcounters"文档包含了每种主要操作的次数
"asserts"统计了断言的次数
   www.zzzyk.com  
6.mongostat
serverStatus虽然强大,但对服务器的监控来说不怎么容易.MongoDB提供了mongostat
mongostat输出一些serverStatus提供的重要信息,它会每秒输出新的一行,比之前看到的静态数据实时性要好.
它输出多个列,分别是 inserts/s commands/s vsize 和 %locked,与serverStatus的数据相对应.
还可以使用第三方插件进行数据库的监控.
 
7.安全和认证
认证的基础知识
每个MongoDB实例中的数据库都可以有很多用户,如果开启了安全性检查,这只有数据库认证用户才能执行读或写操作.
在认证的上下文中,MongoDB会将普通的数据作为admin数据库处理.admin数据库中的用户被称为超级用户(管理员).
在认证后,管理员可以读写所有数据库,执行特定的管理命令,如listDatabases和shutdown.
在开启安全检查前,至少要有个管理员帐号,在shell连接的是没有开启安全检查的服务器

 
上面添加了管理员refactor_root,在test数据库添加了两个普通账号,其中一个有只读权限.在shell中创建只读用户只要
在addUser的第三个参数设为true.调用addUser必须有响应数据库的写权限.这里可以对所有数据库调用addUser,
因为还没有开启安全检查.
 
重启数据库,重启时加入 --auth 命令行选项,开启安全检查


 
第一次连接时,不能test数据库执行任何操作,作为只读用户认证后,能查找,不能插入数据.能读写用户认证后,能查找和插入
数据,但不能使用show dbs 来列举所有数据库.超级用户认证后,可以为所欲为了.
 
8.认证的工作原理
数据库的用户帐号以文档的形式存储在system.users集合里.文档的结构是
{
"_id" : ObjectId("5006a037dff37e149322fd83"),
"user" : "refactor_read_write",
"readOnly" : false,
"pwd" : "5a84584ac51d3f702461fce4c46b0d6b"//是根据用户名和密码生成的散列
}
知道了用户信息是如何存储的以及存储位置后,就可以进行日常的管理工作了.
如删除帐户:
> db.system.users.remove({"user":"refactor_read"})
> db.auth("refactor_read","refactor")
0
用户认证时,服务器将认证和连接绑定来跟踪认证,也就是说如果驱动程序或是工具使用了连接池或是因故障切换到  www.zzzyk.com  
另一个节点,所有认证用户必须对每个新连接重新认证.
 
MongoDB的传输协议是不加密的,如需加密,可以用ssh隧道或者类似的技术做客户端和服务器间的加密.
建议将MongoDB服务器放在防火墙或放在只有应用服务器能访问的网络中.如果MongoDB必须能被外面访问到的话,
建议使用--bindip选项,可以指定mongod绑定到的本地ip地址.如:只能从本机应用服务器访问,可以使用
mongod --bindip localhost
默认情况下MongoDB会开启一个简单的http服务器,便于查看运行,锁,复制等方面的信息,要是不想公开这些信息,可以用
--nohttpinte易做图ce来关闭管理接口.
可以用--noscripting完全禁止服务端javascript执行
 
9.备份和修复
MongoDB将所有数据都存放在 数据目录 下,默认目录是C:\data\db\.启动MongoDB的时候可以用--dbpath指定数据目录.
不论数据目录在哪里,它都存放着MongoDB的所有数据.要想备份MongoDB,只要简单的复制数据目录中的所有文件即可.
除非服务器做了完整的fsync,还不允许写入,否则在运行MongoDB时创建数据目录的副本并不安全,这样的备份可能已经
破损了,需要修复.
在运行MongoDB时创建数据目录的副本并不安全,所以就得先把服务器关了,再复制数据目录.但是关闭数据库就要停止业务.
 
10.mongodump和mongorestore
mongodump是一种能在运行时备份的方法.mongodump对运行的MongoDB做查询,然后将所有查到的文档写入磁盘.
因为mongodump是一般的客户端,所以可供运行的MongoDB使用,即便是正在处理其他请求或是执行写入也没有问题.
mongodump使用普通的查询机制,所以产生的备份不一定是服务器数据的实时快照.服务器在备份过程中处理写入时,非常明显.  www.zzzyk.com  
mongodump备份时的查询会对其他客户端的性能产生影响.
mongodump --help 获得帮助
mongorestore是从备份中恢复数据的工具.
mongorestore获取mongodump 的输出结果,并将备份的数据插入运行的MongoDB实例中.
如:将数据库test备份到backup目录
mongodump -d test -o backup
使用mongorestore 恢复到testNew 数据库
mongorestore -d testNew --drop backup/test/
-d指定要恢复的数据库.--drop指在恢复前删除集合(若存在),否则数据就会与现有集合数据合并,可能会覆盖一些文档.
可以使用mongorestore --help获得帮助信息
 
11.fsync和锁
虽然使用mongodump和mongorestore能不停机备份,但是却失去了获取实时数据视图的能力.MongoDB的fsync命令
能在MongoDB运行时复制数据目录还不会损坏数据.
fsync命令会强易做图务器将所有缓冲区写入磁盘.还可以选择上锁住址对数据库的进一步写入,知道释放锁为止.写入锁是让
fsync在备份时发挥作用的关
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,