21.MongoDB

一、简介: 

        MongoDB 由C++编写,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。它有很多优势:

        它面向文档存储,支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。

        允许在服务端执行脚本,可用Javascript编写函数并直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用。

        可在 MongoDB 记录中设置任何属性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")来实现更快的排序。

        可通过本地或者网络创建数据镜像,扩展性更强。

        如果负载的增加(需要更多的存储空间和更强的处理能力),它可以分布在计算机网络中的其他节点上这就是所谓的分片。

        支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。

        使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段。

        Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合操作。

        Map和Reduce。Map函数调用emit(key,value)遍历集合中所有的记录,将key与value传给Reduce函数进行处理。

        Map函数和Reduce函数是使用Javascript编写的,并可以通过db.runCommand或mapreduce命令来执行MapReduce操作。

        GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件。



二、下载安装:    https://blog.51cto.com/linuxg/1895805

        1、下载服务和工具等:https://www.mongodb.com/download-center/community

            (使用apt-get install 资源较老,推荐官网下载安装。若用 apt-get install 安装,则使用 apt-get install mongodb-clients,确保版本一致)

        2、安装:

                ①、dpkg 安装:dpkg -i mongodb.deb

                ②、源码安装: tar -zxvf mongodb.tgz

                ③、查看版本:mongod -version

        3、启动&服务:

                ①、命令方式:

                mongod --dbpath=/dirxxx -logpath=/data/mongo/mongo.log -logappend -fork -port=27017        (后接参数。不推荐使用)

                service mongod start  (配置文件在 /etc/mongod.conf 中)

                ②、配置文件方式:mongod -f mongodb.conf(配置文件如下。若需自启动,最好 find / -name mongod.lock 再 rm /dir/mongod.lock 防止非正常关闭干扰)

                port=27017    #mongodb端口。搭建集群时,每个主机端口号要区分开。

                bind_ip=192.168.xxx.xxx

                dbpath=/mangodir    #数据存放目录

                logpath=/var/log/mongodb/mongo.log    #日志文件目录

                logappend=true    #追加方式写日志文件

                journal=true    #启用日志选项

                fork=true    #后台运行 

                replSet=<name>    #副本集名称,同一个副本集,名称必须一致

                maxConns=20000    #最大连接数

                oplogSize=2048     #同步操作记录文件大小(MB)  

                smallfiles=true    #使用较小的默认文件 

        4、关闭服务:

                ①、Crtl+C

                ②、命令方式:

                mongod --shutdown --dbpath=/dirxxx

                service mongod stop

                ③、查找进程号关闭:ps -ef | grep mongo    kill <pid>



-*-*-*-*-*-*        以上为配置服务器。以下通过mongo命令配置数据库:https://docs.mongodb.com/manual/mongo/        -*-*-*-*-*-*

        登录客户端:mongo --host=xxx.xxx.xxx.xxx


三、配置集群:    

        0、集群服务器配置:(priority:优先级,可选参数)

                config={_id:"<dbname>",

                    members:[

                        {_id:<id1>,host:"<host_ip1>:<port1>",priority:<1>},

                        {_id:<id2>,host:"<host_ip2>:<port2>",priority:<2>},

                        {_id:<id3>,host:"<host_ip3>:<port3>",arbiterOnly:true}    //仲裁服务器

                ]};

        1、初始化新创建的数据库集群:(config:上述的配置,可选参数。如果缺省,则需要用 rs.add 手动添加)

                rs.initiate(config);

        2、集群中只能有一个服务器运行此命令。如果其他的某个也运行了,则需清除:

                use <local>

                db.dropDatabase()

                exit

                service mongodb restart

        3、添加从服务器:        https://docs.mongodb.com/manual/reference/method/rs.add/#rs.add

                rs.add({ _id:<id>, host:"<host_ip>:<port>"})



四、查看状态等:(具体参照官方文档)

        1、检查配置:rs.config();

        2、查看集群状态:rs.status();

        3、查看用户:show users

        4、查看数据库:show dbs

        5、查看用户表数据:db.system.users.find()



五、用户操作:    数据库操作:    https://docs.mongodb.com/manual/reference/command/

        1、选择数据库:use <admin>    (或者使用 db = db.getSiblingDB('admin') )

        2、添加用户:    

db.createUser({

 user: "<name>", pwd: "<pwd>",

 roles: [ { role: "readWrite", db: "<user1>" }, { role: "read", db: "<user2>" } ]     //普通用户权限设置

// roles: [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" } ] //管理员权限设置

})

        3、用户操作:    https://docs.mongodb.com/manual/reference/command/nav-authentication/

                ①、use <admin>;        (选择数据库)

                ②、db.auth("<name>", "<pwd>");        (登录用户)

                ③、db.runCommand({logout:1});        (登出用户)

                ④、db.changeUserPassword("<UserName>","<pwd>");        (修改密码)

        4、修改角色:    https://docs.mongodb.com/manual/reference/command/createUser/#dbcmd.createUser

                ①、添加角色:db.grantRolesToUser( "<userName>", [ { role: "<role>", db: "<database>"} ])

                ②、取消角色:db.revokeRolesFromUser( "<userName>", [ { role: "<role>", db: "<database>"} ])

                ③、数据库角色类型:    http://docs.mongodb.org/manual/reference/built-in-roles/#dbAdmin

        Ⅰ、用户角色:(数据库操作)

                read:读权限。非系统集合、系统集合中的system.indexes, system.js, system.namespaces

                readWrite: 读写权限。非系统集合、系统集合中的system.js

        Ⅱ、数据库管理角色:(数据库管理角色)

                dbOwner:数据库所有者。有该数据库的全部权限。

                dbAdmin:管理操作数据库对象。没有数据库的读写权限。

                userAdmin:创建或修改 当前数据库的 用户或角色。可以将该数据库的任意权限赋予任意的用户。

        Ⅲ、集群管理权限:( admin 数据库特有,管理整个系统而非单个数据库。这些权限包含了复制集和共享集群的管理函数)

                clusterAdmin:最大的集群管理功能。相当于clusterManager, clusterMonitor, and hostManager和dropDatabase的权限组合。

                clusterManager:集群和复制集的管理和监控操作。可以操作config和local数据库(即分片、复制)。

                clusterMonitor:仅监控集群和复制集。

                hostManager:监控和管理服务器的权限,包括shutdown节点,logrotate, repairDatabase等。

                backup/restore:备份恢复权限。

        Ⅳ、数据库权限:( admin 数据库特有,管理其余数据库。不包括应用到集群中的数据库)

                readAnyDatabase:读权限。

                readWriteAnyDatabase:读写权限。

                userAdminAnyDatabase:具有userAdmin每一个数据库权限。

                dbAdminAnyDatabase:提供了dbAdmin每一个数据库权限。

        Ⅴ、超级管理员权限:

                root:dbadmin到admin数据库、useradmin到admin数据库以及UserAdminAnyDatabase。不具有备份恢复、直接操作system.*集合的权限,但可以自己给自己赋予这些权限。

        5、其他操作:   https://jingyan.baidu.com/article/dca1fa6f0428a4f1a440522e.html

                查询数据库列表:http://blog.csdn.net/huxu981598436/article/details/47216493

                表的操作:https://www.cnblogs.com/linu/articles/10164821.html

                获得数据库所有用户权限:db.getUsers()

                获得某个用户权限:db.getUser()

                修改密码:db.changeUserPassword("name","pwd");

                              :db.updateUser("name", {pwd:"pwd"} );

                删除用户:db.dropUser("name")

                删除所有用户:db.dropAllUsers() 

                创建角色:db.createRole()

                更新角色:db.updateRole()

                删除角色:db.dropRole("name")

                获得某个角色信息:db.getRole()

                删除数据库:db.dropDatabase()



六、数据备份与恢复:

        1、数据备份:mongodump -h <dbHostIP>:<portNum> -u<user> -p<password> -d <dbName> -o <dbPath>

                -h:MongDB所在服务器地址。端口号可缺省。

                -d:需要备份的数据库实例。

                 -u/-p:数据库实例中的用户名和密码,不加空格。可缺省。

                -o:备份的数据存放位置。备份完后系统自动在dump目录下建立<dbName>目录,用于存放该数据库实例的备份数据。

        2、数据恢复:mongorestore -h <hostName>:<port> -u<user> -p<password> -d dbname <path>

                --host/ -h <:port>:服务器地址。

                --db/-d:需要恢复的数据库实例。

                -u/-p:数据库实例中的用户名和密码,不加空格。可缺省。

                --drop:恢复时先删除当前数据,后恢复备份的数据。恢复后,备份后添加修改的数据都会被删除。

                --dir/<path>:最后的一个参数,指定备份的目录。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,706评论 4 366
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,002评论 1 301
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,462评论 0 250
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,375评论 0 216
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,763评论 3 294
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,849评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,033评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,768评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,490评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,734评论 2 253
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,204评论 1 264
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,566评论 3 260
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,227评论 3 241
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,137评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,934评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,926评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,774评论 2 274