【第22期】观点:IT 行业加班,到底有没有价值?

mongodb进阶三之mongodb管理

原创 2015年07月10日 14:58:45

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/




版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

MongoDB基本管理命令

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

MongoDB入门学习(一):MongoDB的安装和管理

以前用MySQL数据库,整天都是写大堆大堆的SQL语句,要记住这些SQL关键字都要花好几天时间,写的蛋都爆了,当接触到MongoDB的时候,发现不用写SQL,瞬间觉得高大上,瞬间产生了学习使用它的冲动...

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

MongoDB入门学习(二):MongoDB的基本概念和数据类型

上一篇讲了MongoDB的安装和管理,其中涉及到了一些概念,数据结构还有一些API的调用,不知道的没关系,其实很简单,这篇会简单介绍一下。 1.文档         文档是MongoDB的核心概念...

MongoDB的日常维护管理

主要介绍了日常运行维护的管理工具 MongoDB的日常维护包括使用配置文件,设置访问控制,Shell交互,系统监控和管理,数据库日常备份和恢复 启动和停止MongoDB 启动后可以通过数...

GoldenGate的几个进程

Manager进程  Manager进程是GoldenGate的控制进程,运行在源端和目标端上。它主要作用有以下几个方面:启动、监控、重启Goldengate的其他进程,报告错误及事件,分配数据存储...

MongoDB入门学习(三):MongoDB的增删查改

对于我们这种菜鸟来说,最重要的不是数据库的管理,也不是数据库的性能,更不是数据库的扩展,而是怎么用好这款数据库,也就是一个数据库提供的最核心的功能,增删查改。         因为MongoDB存储数...

哈尔滨中软卓越分享:前端程序员进阶必经之路

今天在钉钉上瞎翻,看到了一些前端工程师的招聘,5k-8k,同样都是码代码的,怎么前端攻城狮就比其他语言的低这么多。或许是能力不到,只能拿这个层次而已。下面分享一个前端攻城狮从入门到大神的学习必经之路,...

Linux版块所有精华贴整理

一、Linux视频教程相关=====精品教程推荐======= 在线视频:马哥linux入门视频教程<a href="http://edu.51
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)