美文网首页
21.MongoDB

21.MongoDB

作者: 柏666 | 来源:发表于2019-06-28 14:30 被阅读0次

    一、简介: 

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

    相关文章

      网友评论

          本文标题:21.MongoDB

          本文链接:https://www.haomeiwen.com/subject/ysdjcctx.html