热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MongoDB数据库如何管理

1.启动和停止MongoDB执行mongod,启动MongoDB服务器。mongod有很多选项,在命令中执行mongod--help主要选项如下:--dbpath指定数据目录,默认值是C:\data\db。每个mongod进程都需要独立的数据目录。如果要是有3个mongod实例,那么必须有3个独立的数据

1.启动和停止MongoDB

执行mongod,启动MongoDB服务器。mongod有很多选项,在命令中执行 mongod --help

主要选项如下:

--dbpath

指定数据目录,默认值是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
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启动时使用--nohttpinterface来关闭管理接口.

5.serverStatus

要获取运行中的MongoDB服务器统计信息,最基本的工具是serverStatus命令

db.runCommand({"serverStatus":1})

serverStatus返回的键解释:

"globalLock"的值表示全局写入锁占用了服务器多少时间(单位微秒)

"mem"包含服务器内存映射了多少数据,服务器进程的虚拟内存和常驻内存的占用情况(单位MB)

"indexCounters"表示B树在磁盘检索("misses")和内存检索("hits")的次数.如果这个比值开始上升,就要考虑加内存了.

"backgroundFlushing"表示后台做了多少次fsync以及用了多少时间

"opcounters"文档包含了每种主要操作的次数

"asserts"统计了断言的次数

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

用户认证时,服务器将认证和连接绑定来跟踪认证,也就是说如果驱动程序或是工具使用了连接池或是因故障切换到

另一个节点,所有认证用户必须对每个新连接重新认证.

MongoDB的传输协议是不加密的,如需加密,可以用ssh隧道或者类似的技术做客户端和服务器间的加密.

建议将MongoDB服务器放在防火墙或放在只有应用服务器能访问的网络中.如果MongoDB必须能被外面访问到的话,

建议使用--bindip选项,可以指定mongod绑定到的本地ip地址.如:只能从本机应用服务器访问,可以使用

mongod --bindip localhost

默认情况下MongoDB会开启一个简单的http服务器,便于查看运行,锁,复制等方面的信息,要是不想公开这些信息,可以用

--nohttpinterface来关闭管理接口.

可以用--noscripting完全禁止服务端Javascript执行

9.备份和修复

MongoDB将所有数据都存放在 数据目录 下,默认目录是C:\data\db\.启动MongoDB的时候可以用--dbpath指定数据目录.

不论数据目录在哪里,它都存放着MongoDB的所有数据.要想备份MongoDB,只要简单的复制数据目录中的所有文件即可.

除非服务器做了完整的fsync,还不允许写入,否则在运行MongoDB时创建数据目录的副本并不安全,这样的备份可能已经

破损了,需要修复.

在运行MongoDB时创建数据目录的副本并不安全,所以就得先把服务器关了,再复制数据目录.但是关闭数据库就要停止业务.

10.mongodump和mongorestore

mongodump是一种能在运行时备份的方法.mongodump对运行的MongoDB做查询,然后将所有查到的文档写入磁盘.

因为mongodump是一般的客户端,所以可供运行的MongoDB使用,即便是正在处理其他请求或是执行写入也没有问题.

mongodump使用普通的查询机制,所以产生的备份不一定是服务器数据的实时快照.服务器在备份过程中处理写入时,非常明显.

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在备份时发挥作用的关键.

在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()


推荐阅读
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • Allegro总结:1.防焊层(SolderMask):又称绿油层,PCB非布线层,用于制成丝网印板,将不需要焊接的地方涂上防焊剂.在防焊层上预留的焊盘大小要比实际的焊盘大一些,其差值一般 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了markdown[软件代理设置]相关的知识,希望对你有一定的参考价值。 ... [详细]
  • DockerDataCenter系列(四)-离线安装UCP和DTR,Go语言社区,Golang程序员人脉社 ... [详细]
  • centos php部署到nginx 404_NodeJS项目部署到阿里云ECS服务器全程详解
    本文转载自:http:www.kovli.com20170919ecs-deploy作者:Kovli本文详细介绍如何部署NodeJS项目到阿里云ECS上, ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • MongoDB用户验证auth的权限设置及角色说明
    本文介绍了MongoDB用户验证auth的权限设置,包括readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase、cluster相关的权限以及root权限等角色的说明和使用方法。 ... [详细]
  • iOS Swift中如何实现自动登录?
    本文介绍了在iOS Swift中如何实现自动登录的方法,包括使用故事板、SWRevealViewController等技术,以及解决用户注销后重新登录自动跳转到主页的问题。 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • GSIOpenSSH PAM_USER 安全绕过漏洞
    漏洞名称:GSI-OpenSSHPAM_USER安全绕过漏洞CNNVD编号:CNNVD-201304-097发布时间:2013-04-09 ... [详细]
  • 本文介绍了在RHEL 7中的系统日志管理和网络管理。系统日志管理包括rsyslog和systemd-journal两种日志服务,分别介绍了它们的特点、配置文件和日志查询方式。网络管理主要介绍了使用nmcli命令查看和配置网络接口的方法,包括查看网卡信息、添加、修改和删除配置文件等操作。 ... [详细]
author-avatar
Life一切安好
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有