mongodb进阶三之mongodb管理

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

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

一:命令

安装就不少了,网上有非常多资料以下列一些參数
quiet 安静输出
port arg 指定服务port号,默认port27017
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,创建server进程
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接口,默认关闭27018port訪问
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 从库 port号
only arg 指定单一的数据库复制
slavedelay arg 设置从库同步主库的延迟时间 * Replica set(副本集)选项:
replSet arg 设置副本集名称 * Sharding(分片)选项
configsvr 声明这是一个集群的config服务,默认port27019,默认文件夹/data/configdb
shardsvr 声明这是一个集群的分片,默认port27018
noMoveParanoia 关闭偏执为moveChunk数据保存


命令:

mongodb帮助命令  help

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

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

查看哪些数据库 show dbs

创建和切换数据库  use  aaa

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

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

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

删除数据库  db.dropDatebase()

加入用户 db.addUser("username","password“)

删除username db.dropUser("username")

终止数据库服务进程 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的读权限,password是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:更改usernamepassword

改动用户的passwordchangeUserPassword命令。

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


三:訪问控制安全

3.1:mongodb为每一个数据库提供了授权和认证。

Mongodb认证。授权用户,是在数据库级别上,Mongodb把用户的凭据放在system.users collection中,认证默认是关闭的。能够通过auth,keyFile配置选项设置。对于Mongodb企业版能够使用kerberos来认证。

在一个数据库上,你仅仅能认证一个用户。假设认证了第二个。第一个就会被放弃。

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

默认的。MongoDB会觉得所执行的环境是安全的,没有进行数据库的安全性和身份验证。在这种配置环境下。唯一要确保的是仅仅有信任的机器才干连接到MongoDBport。

假设使用数据库专用server。最简单的方法是让它全然的无法从外部訪问,将MongDB服务绑定--bind_ip到指定ip上。更进一步的能够在指定一个port--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:怎样使用管理员认证
採用管理员认证的方式认证,首先要创建一个管理员用户,上节我们讲过怎样创建管理员以及怎样管理权限和password。

有了管理员用户或者启动用户。就可以通过--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 指定登录password。
–dbpath arg 越过mongodserver。直接訪问给定路径的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 指定登录password。
–dbpath arg 越过mongodserver,直接訪问给定路径的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:数据库未执行时的恢复
数据库未执行时的恢复也非常easy。通过使用mongorestore进行恢复。不仅能够进行总体恢复,还能够进行某一个数据库的恢复。比如使用下面命令恢复test数据库到执行系统中。

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


5.5:怎样通过远程链接进行备份
网络同意的情况下。mongodump工具能够进行远程链接数据库,进行备份。比例如以下面备份就是通过指定主机地址、port、username、password和备份文件夹而进行的备份操作。

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


5.6:怎样通过远程链接进行恢复
相应的通过mongodump工具进行远程链接备份的数据库,也能够通过mongorestore来进行恢复。

比例如以下面恢复就是通过指定主机地址、port、username、password和备份文件夹而进行的恢复操作。

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/




原文地址:https://www.cnblogs.com/gcczhongduan/p/5332233.html