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

mongodb进阶三之mongodb管理

http:blog.csdn.netstronglyharticledetails46827141平时的开发环境win比较多啊,但生产环境要放到unix环境上一:命令

http://blog.csdn.net/stronglyh/article/details/46827141

平时的开发环境win比较多啊,但生产环境要放到unix环境上

一:命令

安装就不少了,网上有很多资料下面列一些参数
quiet 安静输出
port arg 指定服务端口号,默认端口27017
bind_ip arg 绑定服务IP,绑定127.0.0.1,只本机访问,默认本地所有IP
logpath arg 指定MongoDB日志文件,注意是指定文件不是目录
logappend 使用追加的方式写日志
pidfilepath arg PID File 的完整路径,如果没有设置,则没有PID文件
keyFile arg 集群的私钥的完整路径,只对于Replica Set 架构有效
unixSocketPrefix arg UNIX域套接字替代目录,(默认为 /tmp)
fork 以守护进程的方式运行MongoDB,创建服务器进程
auth 启用验证
cpu 定期显示CPU的CPU利用率和iowait
dbpath arg 指定数据库路径
diaglog arg diaglog选项 0=off 1=W 2=R 3=both 7=W+some reads
directoryperdb 设置每个数据库将被保存在一个单独的目录
journal 启用日志选项,的数据操作将会写到journal文件夹文件里
journalOptions arg 启用日志诊断选项
ipv6 启用IPv6选项
jsonp 允许JSONP形式通过HTTP访问(有安全影响)
maxConns arg 最大同时连接数 默认2000
noauth 不启用验证
nohttpinterface 关闭http接口,默认关闭27018端口访问
noprealloc 禁用数据文件预分配(往往影响性能)
noscripting 禁用脚本引擎
notablescan 不允许表扫描
nounixsocket 禁用Unix套接字监听
nssize arg (=16) 设置信数据库.ns文件大小(MB)
objcheck 在收到客户数据,检查的有效性。
profile arg 档案参数 0=off 1=slow, 2=all
quota 限制每个数据库的文件数,设置默认为8
quotaFiles arg number of files allower per db, requires quota
rest 开启简单的rest API
repair 修复所有数据库run repair on all dbs
repairpath arg 修复库生成的文件的目录,默认为目录名称dbpath
slowms arg (=100) value of slow for profile and console log
smallfiles 使用较小的默认文件
syncdelay arg (=60) 数据写入磁盘的时间秒数(0=never,不推荐)
sysinfo 打印一些诊断系统信息
upgrade 如果需要升级数据库 * Replicaton 参数
fastsync 启用从库复制服务,该数据库是主库快照,可快速启用同步
autoresync 如果从库与主库同步数据差得多,自动重新同步,
oplogSize arg 设置oplog的大小(MB) * 主/从参数
master 主库模式
slave 从库模式
source arg 从库 端口号
only arg 指定单一的数据库复制
slavedelay arg 设置从库同步主库的延迟时间 * Replica set(副本集)选项:
replSet arg 设置副本集名称 * Sharding(分片)选项
configsvr 声明这是一个集群的config服务,默认端口27019,默认目录/data/configdb
shardsvr 声明这是一个集群的分片,默认端口27018
noMoveParanoia 关闭偏执为moveChunk数据保存


命令:

mongodb帮助命令  help

数据库级帮助命令  db.help()

集合级帮助命令 db.users.help()

查看哪些数据库 show dbs

创建和切换数据库  use  aaa

查当前数据库状态  db.stats()

获取当前数据库集合 db.getCollectionNames()

获取当前数据库名字  db.getName()

删除数据库  db.dropDatebase()

添加用户 db.addUser("用户名","密码“)

删除用户名 db.dropUser("用户名")

终止数据库服务进程 db.shutdownServer()


二:用户角色管理

2.1:创建管理员

用户管理员用来创建的用户,也用来创建和分配角色。用户管理员可以拥有数据库中的任何特权,可以创建新的用户或者管理员。正常情况下在一个MongoDB的部署中,应该创建用户管理员作为第一个用户,然后使用这个用户创建的所有其他用户。 为了能够创建第一个用户管理员,MongoDB提供userAdmin和userAdminAnyDatabase角色,两个角色支持用户和角色管理操作的各种访问。使用最小权限userAdmin或者使用userAdminAnyDatabase赋予所有有关的特权。 拥有这两个角色的用户可以授予自己无限的特权。具体地,拥有userAdmin角色的用户可以授予本身数据库中的任何特权。一个用户拥有userAdminAnyDatabase角色的用户管理员可以授予本身在系统中的任何特权。 使用以下步骤创建用户管理员,首先连接admin数据库:

mongo --port 27017 --authenticationDatabase admin
然后创建系统用户:

db.createUser({user: "siteUserAdmin",pwd: "password",roles:
    [{role: "userAdminAnyDatabase",db: "admin"}]}
最后可以验证一下:

db.runCommand({usersInfo:"manager",showPrivileges:true})


2.2:将用户添加到数据库

使用createUser命令将用户添加到你希望这个用户拥有相应权限的数据库中。下面的例子是赋予testUser数据库test的读权限,密码是12345678。

use test
db.createUser({
      user: "testUser",
      pwd: "12345678",
      roles: [
         { role: "read", db: "test" },
      ]
    }
)


2.3:设置超级用户

建立一个超级用户需要有何创建用户管理员一样的权限。

use admin
db.createUser(
    {
      user: "superuser",
      pwd: "12345678",
      roles: [ "root" ]
    }
)


2.4:创建角色

建立一个用户角色使用createRole这个命令。每一个角色可以通过privileges授予一些系统特权,通过roles来授予一些数据库管理权限。writeConcern参数是保障写操作的可靠性。

use admin
db.createRole(
  {
    role: "myClusterwideAdmin",
    privileges:
    [
      { resource: { cluster: true }, actions: [ "addShard" ] },
      { resource: { db: "config", collection: "" }, actions: [ "find", "update", "insert" ] },
      { resource: { db: "users", collection: "usersCollection" }, actions: [ "update" ] },
      { resource: { db: "", collection: "" }, actions: [ "find" ] }
    ],
    roles:
    [
      { role: "read", db: "admin" }
    ],
    writeConcern: { w: "majority" , wtimeout: 5000 }
  }
)
)


2.5:分配角色

用户分配角色使用grantRolesToUser命令。可以给用户分配各个数据库的各种管理权限。

use admin
db.grantRolesToUser(
  "accountAdmin01",
  [
    {
      role: "readWrite", db: "products"
    },
    {
      role: "readAnyDatabase", db:"admin"
    }
  ]
)


2.6:验证用户权限

验证用户的角色使用getRole命令。

use admin
db.getUser("accountUser01")
db.getRole( "siteRole01", { showPrivileges: true } )


2.7:修改用户访问权限

修改用户的访问权限revokeRolesFromUser命令。

use admin
db.grantRolesToUser(
    "accountUser01",
    [
      { role: "read", db: "records" }
    ]
)
db.revokeRolesFromUser(
    "accountUser01",
    [
      { role: "readWrite", db: "accounts" }
    ]
)


2.8:更改用户名密码

修改用户的密码changeUserPassword命令。

db.changeUserPassword("reporting", "SOh3TbYhxuLiW8ypJPxmt1oOfL")


三:访问控制安全

3.1:mongodb为每个数据库提供了授权和认证。Mongodb认证,授权用户,是在数据库级别上,Mongodb把用户的凭据放在system.users collection中,认证默认是关闭的,可以通过auth,keyFile配置选项设置。对于Mongodb企业版可以使用kerberos来认证。

在一个数据库上,你只能认证一个用户,如果认证了第二个,第一个就会被放弃。

Mongodb规定授权是以role为基础的。每个授权的用户都保存在system.users中,要给用户分配角色,必须要有一个管理角色的用户在数据库中,如果没有就必须创建一个。

默认的,MongoDB会认为所运行的环境是安全的,没有进行数据库的安全性和身份验证。在这样的配置环境下,唯一要确保的是只有信任的机器才能连接到MongoDB端口。如果使用数据库专用服务器,最简单的方法是让它完全的无法从外部访问,将MongDB服务绑定--bind_ip到指定ip上。更进一步的可以在指定一个端口--port。

如果在一个不信任的环境中使用MongoDB就涉及到如何让MongoDB运行在安全模式上。MongoDB通过--auth和--keyfile参数的使用来启动安全模式用以支持身份验证和简单的粗粒度访问控制。

3.2:使用密钥文件
如果要使用key文件,那么在mongod启动的时候指定keyfile选项。 一般使用openssl生成keyfile文件:

openssl rand -base64 741 -out /var/lib/mongodb/keyfile0
chmod 600  /var/lib/mongodb/keyfile0
特别说明:如果指定keyfile内容的话,MongoDB会跳过keyfile里面的空格。 如:echo "test sets" > /var/lib/mongodb/keyfile0

mongod --keyfile /var/lib/mongodb/keyfile0 --fork      

3.3:如何使用管理员认证
采用管理员认证的方式认证,首先要创建一个管理员用户,上节我们讲过如何创建管理员以及如何管理权限和密码。有了管理员用户或者启动用户,即可通过--auth参数来启动MongoDB。

mongod --auth                      
如果通过配置文件启用管理员认证,只需要把auth的设置改为true即可。

mongod /etc/mongod.conf --fork   


四:复制数据文件

如何进行复制
通过复制数据文件即可完成数据库的备份和恢复,这种方式简单明了。


一般经过以下步骤:


1.锁定数据库或关闭数据库。


2.复制数据文件到相应的目录。


3.解锁数据库或重启数据库。


特别说明:如果只需要复制名为test的数据库,则可以复制全部的test.*来完成。


4.1:如何锁定数据库
进行备份时为了防止数据文件发生变化引起问题,可以使用以下命令将数据库锁定:

db.fsyncLock()
这个命令禁止所有写入,并将脏页写入磁盘保证数据不再变化。这个时候的写操作都会在内存中排队等待了,直到数据库解锁。


4.2:复制数据文件
新建一个复制数据文件的目标目录:

mkdir /usr/backup
完成数据文件复制的命令使我们很熟悉的cp命令,必须输入以下命令才能进行到下一节:

cp -R /var/lib/mongodb/*  /usr/backup  #你需要做备份的目录,确保目录已经存在。
确保备份目录容量够大,漏掉文件可能备份会失效。如果是备份到其他介质,可以直接指定目录。linux下/mnt目录一般是设备目录,外置设备一般在该目录下。


4.3:如何解锁数据库
完成数据文件的复制后,就可以使用以下命令将数据库解锁,恢复数据库的正常运行状态:

db.fsyncUnlock()
调用db.fsyncUnlock()和db.fsyncLock()命令是不要关闭shell,因为如果你启用了身份验证或者断开了链接,可能连不上,需要重新启动mongod,这些命令就都失效了。


4.4:如何恢复数据库
数据库发生问题时需要进行恢复,使用复制的文件进行恢复时可以使用以下命令:

cp -R /usr/backup/* /var/lib/mongodb/
注意:恢复前应该确保mongod没有运行,且/var/lib/mongodb/为空。linux使用rm -rf删除目录。删除前一定确认cp命令成功执行。恢复完成后,再启动mongod。启动mongod使用一下命令:

mongod -f /etc/mongod.conf --fork --nojournal


五:工具方式

5.1:mongodump的基本操作
通过mongodump进行备份可以使用以下选项:
–help 查看帮助信息。
-v [ --verbose ] 显示更多调试信息。
–version 显示该命令版本。
-h [ --host ] arg mongodb数据库所在主机IP地址。
–port arg mongodb启动时所使用的端口。也可以使用 –host:port格式直接指定主机和端口。
–ipv6 是否支持ipv6 。
-u [ --username ] arg 指定登陆用户名。
-p [ --password ] arg 指定登陆密码。
–dbpath arg 越过mongod服务器,直接访问给定路径的mongod数据库文件。使用该参数需要锁定给定的数据目录,所以需要先关闭使用该目录的mongod服务。
–directoryperdb 如果指定了dbpath目录,那么每个db都会保存到一个单独的文件夹中。
–journal enable journaling
-d [ --db ] arg 准备备份的数据库。
-c [ --collection ] arg 准备备份的集合。
-o [ --out ] arg 导出数据将要保存在的目录,如参数为“-”,则直接在控制台显示。
-q [ --query ] arg json query
–oplog Use oplog for point-in-time snapshotting
–repair 尝试修复损坏的数据库。
–forceTableScan 强制表扫描。


5.2:mongorestore的基本操作
与mongodump相对应通过mongorestore进行恢复使用以下选项:
–help 查看帮助信息。
-v [ --verbose ] 显示更多调试信息。
–version 显示该命令版本。
-h [ --host ] arg mongodb数据库所在主机IP地址。
–port arg mongodb启动时所使用的端口。也可以使用 –host hostname:port格式直接指定主机和端口。
–ipv6 是否支持ipv6 。
-u [ --username ] arg 指定登陆用户名。
-p [ --password ] arg 指定登陆密码。
–dbpath arg 越过mongod服务器,直接访问给定路径的mongod数据库文件。使用该参数需要锁定给定的数据目录,所以无法使用当前mongod服务正在使用的目录。
–directoryperdb 如果指定了dbpath目录,那么每个db都会在一个单独的文件夹中。
–journal enable journaling
-d [ --db ] arg 准备恢复的数据库。
-c [ --collection ] arg 准备恢复的集合。
-objcheck 恢复前验证一下数据对象。
-filter arg 有选择的进行恢复。
–oplogReplay replay oplog for point-in-time restore。
–drop 修复前删除所有集合。
–keepIndexVersion 强制表扫描。
这里我们需要了解两个命令,首先是验证写入是否成功的命令:

db.runCommand({"getLastError":1,"j":true})
这个命令主要用来解决一些重要数据需要了解是否已经写入磁盘中。

另外一个是设置数据库提交数据到日志的时间间隔命令:

db.adminCommand({"setParameter":1,"journalCommitInterval":30})
其中setParameter可以设置的间隔为2毫秒到500毫秒,时间间隔月底系统开销越大。


5.3:数据库未运行时的备份
数据库未运行时对数据库进行备份,通过使用mongodump十分方便。例如使用以下命令:

mongodump --dbpath /var/lib/mongodb/ --out /usr/backup


5.4:数据库未运行时的恢复
数据库未运行时的恢复也很简单,通过使用mongorestore进行恢复。不仅可以进行整体恢复,还可以进行某一个数据库的恢复,例如使用以下命令恢复test数据库到运行系统中。

mongorestore --dbpath /usr/backup/ --journal /var/lib/mongodb/test


5.5:如何通过远程链接进行备份
网络允许的情况下,mongodump工具可以进行远程链接数据库,进行备份。例如以下备份就是通过指定主机地址、端口、用户名、密码和备份目录而进行的备份操作。

mongodump --host www.***.com --port 3017 --username user --password pass --out /usr/backup/mongodump-2013-10-24


5.6:如何通过远程链接进行恢复
对应的通过mongodump工具进行远程链接备份的数据库,也可以通过mongorestore来进行恢复。例如以下恢复就是通过指定主机地址、端口、用户名、密码和备份目录而进行的恢复操作。

mongorestore --host www.***.com --port 3017 --username user --password pass /usr/backup/mongodump-2013-10-24


5.7:如何使用oplog进行备份
通过设置操作日志oplog的实时备份点,可以完成快照式的数据库备份。这样做的好处就是如果我们在使用mongodump进行备份的操作时,如有操作正进行数据库删除之类的操作时,我们的mongodump备份已经将这个数据库备份完,那么我们获得的备份就会和实际的数据库不同,而且这个数据库在事实上未成存在过。


mongodump不是快照备份,备份过程中系统可能会继续进行操作。oplog的设置就是避免这种情况发生的,不过使用oplog的前提是mongod启动时使用了--replSet选项。本质是使用了复制的功能,以后讲到复制大家就更清楚了。


5.8:如何使用oplog恢复
与mongodump使用oplog进行备份对应,mongorestore也可以使用oplog对数据库进行恢复。


六:意外关机修复

6.1:一般的处理程序
MongoDB意外关机后,通常有两种选择进行恢复:

1.直接在源文件上进行恢复。
2.保留关机前的原始文件,检查以后再进行恢复。
按照第二种情况的恢复流程是:

1.修复数据库
2.确认数据库情况
3.删除锁文件
4.修复数据库
5.正常启动运行
如果按照第一种方式那么就忽略以上1、2两个步骤。


6.2:修复并保留原始数据库
通过下面的命令,我们来对数据库进行修复,并将原始数据库备份到修复目录/usr/backup下。 这样做的目的是不破坏原始的数据库文件。

mongod --dbpath /var/lib/mongodb --repair --repairpath /usr/backup


6.3:如何确认数据库情况
通过运行下面的命令我们可以将进行修复以后的数据库运行起来。然后通过检查数据库的状态,意外发生前进行的操作执行情况,例如插入数据是否完成,目前表内数据情况等,来判断数据库是否已经完全修复了。

mongod --dbpath /usr/backup


6.4:删除锁文件
根据修复数据库运行的情况,判断如果数据库基本是正常的,我们就可以删除锁文件了。如果数据库不正常,那么就需要做相应的处理。如使用了日志,根据日志进行恢复,如使用了复制那么进行恢复等等情况,具体问题需要具体分析。

rm /var/lib/mongodb/mongod.lock


6.5:修复数据库
修复数据库使用以下的命令,这时修复数据库会使用新文件代替原有的旧文件。

mongod --dbpath /usr/backup --repair


6.6:正常启动数据库
通过以上的几个步骤以后,我们就可以正常启动数据库了。

mongod --dbpath /var/lib/mongodb










感谢huizhi网:http://hubwiz.com/





推荐阅读
  • 用阿里云的免费 SSL 证书让网站从 HTTP 换成 HTTPS
    HTTP协议是不加密传输数据的,也就是用户跟你的网站之间传递数据有可能在途中被截获,破解传递的真实内容,所以使用不加密的HTTP的网站是不 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • 通过将常用的外部命令集成到VSCode中,可以提高开发效率。本文介绍如何在VSCode中配置和使用自定义的外部命令,从而简化命令执行过程。 ... [详细]
  • 本文详细介绍了在 Ubuntu 系统上搭建 Hadoop 集群时遇到的 SSH 密钥认证问题及其解决方案。通过本文,读者可以了解如何在多台虚拟机之间实现无密码 SSH 登录,从而顺利启动 Hadoop 集群。 ... [详细]
  • 本文总结了一些开发中常见的问题及其解决方案,包括特性过滤器的使用、NuGet程序集版本冲突、线程存储、溢出检查、ThreadPool的最大线程数设置、Redis使用中的问题以及Task.Result和Task.GetAwaiter().GetResult()的区别。 ... [详细]
  • 解决 Windows Server 2016 网络连接问题
    本文详细介绍了如何解决 Windows Server 2016 在使用无线网络 (WLAN) 和有线网络 (以太网) 时遇到的连接问题。包括添加必要的功能和安装正确的驱动程序。 ... [详细]
  • 【实例简介】本文详细介绍了如何在PHP中实现微信支付的退款功能,并提供了订单创建类的完整代码及调用示例。在配置过程中,需确保正确设置相关参数,特别是证书路径应根据项目实际情况进行调整。为了保证系统的安全性,存放证书的目录需要设置为可读权限。值得注意的是,普通支付操作无需证书,但在执行退款操作时必须提供证书。此外,本文还对常见的错误处理和调试技巧进行了说明,帮助开发者快速定位和解决问题。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • SecureCRT是一款功能强大的终端仿真软件,支持SSH1和SSH2协议,适用于在Windows环境下高效连接和管理Linux服务器。该工具不仅提供了稳定的连接性能,还具备丰富的配置选项,能够满足不同用户的需求。通过SecureCRT,用户可以轻松实现对远程Linux系统的安全访问和操作。 ... [详细]
  • 在 Axublog 1.1.0 版本的 `c_login.php` 文件中发现了一个严重的 SQL 注入漏洞。该漏洞允许攻击者通过操纵登录请求中的参数,注入恶意 SQL 代码,从而可能获取敏感信息或对数据库进行未授权操作。建议用户尽快更新到最新版本并采取相应的安全措施以防止潜在的风险。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 本文介绍了如何在GitHub上设置多个SSH Key,以解决原有Key失效的问题,并确保不同项目使用不同的私钥进行安全访问。 ... [详细]
  • 本文最初发表在Thorben Janssen的Java EE博客上,每周都会分享最新的Java新闻和动态。 ... [详细]
  • 大家好,我是李白。本文将分享一个从零开始的全栈项目,涵盖了设计、前端、后端和服务端的全面学习过程。通过这个项目,我希望能够帮助初学者更好地理解和掌握全栈开发的技术栈。 ... [详细]
  • 本文介绍了如何利用HTTP隧道技术在受限网络环境中绕过IDS和防火墙等安全设备,实现RDP端口的暴力破解攻击。文章详细描述了部署过程、攻击实施及流量分析,旨在提升网络安全意识。 ... [详细]
author-avatar
心若繁花花满地
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有