21.MongoDB

2019-06-28  本文已影响0人  柏666

一、简介: 

        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>:最后的一个参数,指定备份的目录。

上一篇下一篇

猜你喜欢

热点阅读