MongoDB的搭建

1.mongodb简介

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

2.mongodb重要文件介绍

数据目录(data) 用来存放数据
日志目录(log) 用来存放日志
配置文件 mongo.conf

3.配置文件主要内容介绍(ymal格式)

--系统日志有关  
systemLog:
   destination: file        
   path: "/mongodb/log/mongodb.log"    --日志位置
   logAppend: true                     --日志以追加模式记录
--数据存储有关   
storage:
   journal:
      enabled: true
   dbPath: "/mongodb/data"            --数据路径的位置
-- 进程控制  
processManagement:
   fork: true                         --后台守护进程
   pidFilePath: <string>              --pid文件的位置,一般不用配置,可以去掉这行,自动生成到data中   
--网络配置有关   
net:            
   bindIp: <ip>                       -- 监听地址
   port: <port>                       -- 端口号,默认不配置端口号,是27017   
-- 安全验证有关配置      
security:
  authorization: enabled              --是否打开用户名密码验证
------------eg:如下例----------
cat >  /mongodb/conf/mongo.conf <<EOF
systemLog:
   destination: file
   path: "/mongodb/log/mongodb.log"
   logAppend: true
storage:
   journal:
      enabled: true
   dbPath: "/mongodb/data/"
processManagement:
   fork: true
net:
   port: 27017
   bindIp: 192.168.0.1,127.0.0.1

4.用户、角色及权限管理

mongodb用户及权限管理
MongoDB用户和角色解释系列(上)
MongoDB用户和角色解释系列(下)

4.1 注意事项

验证库: 建立用户时use到的库,在使用用户时,要加上验证库才能登陆。对于管理员用户,必须在admin下创建.

  1. 建用户时,use到的库,就是此用户的验证库
  2. 登录时,必须明确指定验证库才能登录
  3. 通常,管理员用的验证库是admin,普通用户的验证库一般是所管理的库设置为验证库
  4. 如果直接登录到数据库,不进行use,默认的验证库是test,不是我们生产建议的.
  5. 从3.6 版本开始,不添加bindIp参数,默认不让远程登录,只能本地管理员登录。

4.2 MongoDB的内部角色介绍

1.数据库用户角色
read      --读取数据库对像的权限

readWrite   --读取和修改数据库对像权限

2.数据库管理角色

dbAdmin   --执行管理任务角色

dbOwner   --数据库所有者,可以对数据库所有操作

userAdmin   --当前数据库上创建,修改角色和用户功能

3.集群管理角色

clusterAdmin          --集群管理员

clusterManager      --管理集群和监控

clusterMonitor       --监控集群和只读访问

hostManager         --监控和管理服务器功能

4.备份恢复角色
backup    --备份数据最小权限

restore    --恢复权限

5.所有数据库角色
readAnyDatabase   --只读所有数据库角色

readWriteAnyDatabase     --读写所有数据库

userAdminAnyDatabase   --除local之外的所有数据库相同的用户管理操作访问权限

dbAdminAnyDatabase      --除local之外的所有数据库相同的权限

6.超级用户角色

root         --提供所有资源readWriteAnyDatabase,dbAdminAnyDatabase,userAdminAnyDatabase,clusterAdmin,restore,backup

7.内部角色

__system       --提供对数据库中的任何对象执行任何操作的权限

4.3 自定义角色的创建

1.自定义角色格式

{
  role: "<name>",
  privileges: [
     { resource: { <resource> }, actions: [ "<action>", ... ] },
     ...
  ],
  roles: [
     { role: "<role>", db: "<database>" } | "<role>",
      ...
  ],
  authenticationRestrictions: [
    {
      clientSource: ["<IP>" | "<CIDR range>", ...],
      serverAddress: ["<IP>" | "<CIDR range>", ...]
    },
    ...
  ]
}

2.自定义角色(对config库所有表可以增删改查,对users库usersCollection表更新,插入,删除,对所有数据库有查找权限)

> use admin
switched to db admin
> db.createRole(
   {
     role: "wuhan123",       --角色名
     privileges: [
       { resource: { db: "config", collection: "" }, actions: [ "find", "update", "insert", "remove" ] },
       { resource: { db: "users", collection: "usersCollection" }, actions: [ "update", "insert", "remove" ] },
       { resource: { db: "", collection: "" }, actions: [ "find" ] }
     ],
     roles: [
       { role: "read", db: "admin" }
     ]
   }
)

4.4列出角色和删除角色

> db.getRole("wuhan123")   --显示单个角色信息(wuhan123是角色名)
{
"role" : "wuhan123",
"db" : "admin",
"isBuiltin" : false,
"roles" : [
{
"role" : "read",
"db" : "admin"
}
],
"inheritedRoles" : [
{
"role" : "read",
"db" : "admin"
}
]
}
> db.getRoles()     --显示当前库所有角色
[
    {
        "role" : "wuhan123",
        "db" : "admin",
        "isBuiltin" : false,
        "roles" : [
            {
                "role" : "read",
                "db" : "admin"
            }
        ],
        "inheritedRoles" : [
            {
                "role" : "read",
                "db" : "admin"
            }
        ]
    }
]
> db.dropRole("wuhan123");     --删除角色
true
> db.dropAllRoles();       --删除所有角色
NumberLong(1)
>

4.5 用户的管理以及角色的使用

1.创建用户格式

{
  user: "<name>",
  pwd: "<cleartext password>",
  customData: { <any information> },
  roles: [
    { role: "<role>", db: "<database>" } | "<role>",
    ...
  ],
  authenticationRestrictions: [
     {
       clientSource: ["<IP>" | "<CIDR range>", ...]
       serverAddress: ["<IP>" | "<CIDR range>", ...]
     },
     ...
  ],
  mechanisms: [ "<SCRAM-SHA-1|SCRAM-SHA-256>", ... ],
  passwordDigestor: "<server|client>"
}
-- 基本语法说明:
user:用户名
pwd:密码
roles:
    role:角色名
    db:作用对象 
role:root, readWrite,read......    ## 用这些角色进行权限控制

2.创建用户使用角色

> use tong     --进入数据库
switched to db tong  
> db.createUser(   
...    {
...      user: "u_tong",       --指定用户名
...      pwd: "system123",     --指定密码
...      roles: [ "readWrite", "dbAdmin" ]     --使用数据库中的角色
...    }
... )
Successfully added user: { "user" : "u_tong", "roles" : [ "readWrite", "dbAdmin" ] }

2.创建用户指定来源IP和目标IP

> use tong
switched to db tong
> db.createUser(
   {
     user: "u1_tong",    --用户名
     pwd: "system123",   --密码
     roles: [ { role: "readWrite", db: "tong" } ],   --角色
     authenticationRestrictions: [ {
        clientSource: ["192.168.1.10"],    --客户端IP
        serverAddress: ["192.168.1.20"]    --服务端IP
     } ]
   }
)>

3.查看用户和删除用户

> db.getUsers();      --查看当前数据库所有用户
[
{
"_id" : "tong.u1_tong",
"user" : "u1_tong",
"db" : "tong",
"roles" : [
{
"role" : "readWrite",
"db" : "tong"
}
],
"mechanisms" : [
"SCRAM-SHA-1",
"SCRAM-SHA-256"
]
},
{
"_id" : "tong.u_tong",
"user" : "u_tong",
"db" : "tong",
"roles" : [
{
"role" : "readWrite",
"db" : "tong"
},
{
"role" : "dbAdmin",
"db" : "tong"
}
],
"mechanisms" : [
"SCRAM-SHA-1",
"SCRAM-SHA-256"
]
}
]
> db.getUser("u_tong");     --查看指定用户
{
    "_id" : "tong.u_tong",
    "user" : "u_tong",
    "db" : "tong",
    "roles" : [
        {
            "role" : "readWrite",
            "db" : "tong"
        },
        {
            "role" : "dbAdmin",
            "db" : "tong"
        }
    ],
    "mechanisms" : [
        "SCRAM-SHA-1",
        "SCRAM-SHA-256"
    ]
}
> db.dropUser("u_tong");    --删除单个用户
true
> db.dropAllUsers();        --删除当前库所有用户
NumberLong(1)
>

4.将角色授权给用户

> db.grantRolesToUser(
   "u_tong",[ "readWrite" , { role: "read", db: "tong" } ],
> )

5.备份恢复

MongoDB 备份(mongodump)与恢复(mongorestore)
MongoDB数据迁移、备份和恢复

5.1 备份恢复工具---> mongodump和mongorestore

介绍:
mongodump能够在Mongodb运行时进行备份,它的工作原理是对运行的Mongodb做查询,然后将所有查到的文档写入磁盘。但是存在的问题是在使用mongodump产生的备份不一定是数据库的实时快照,如果我们在备份时对数据库进行了写入操作,则备份出来的文件可能不完全和Mongodb实时数据相等。另外在备份时可能会对其它客户端性能产生不利的影响。

5.2 mongodump常用参数说明:

$ mongodump --help
参数说明:
-h:指明数据库宿主机的IP
-u:指明数据库的用户名
-p:指明数据库的密码
-d:指明数据库的名字
-c:指明collection的名字
-o:指明到要导出的文件名
-q:指明导出数据的过滤条件
-j, --numParallelCollections=  number of collections to dump in parallel (4 by default)
--oplog  备份的同时备份oplog
--authenticationDatabase :验证数据库名称

5.3 mongorestore的常用参数说明:

--host <:port>, -h <:port>:  MongoDB所在服务器地址,默认为: localhost:27017
--db , -d :  需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2
--drop:   恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用哦!
<path>:   mongorestore 最后的一个参数,设置备份数据所在位置,例如:c:\data\dump\test。你不能同时指定 <path> 和 --dir 选项,--dir也可以设置备份目录。
--dir:  指定备份的目录;你不能同时指定 <path> 和 --dir 选项
--authenticationDatabase :验证数据库名称

5.4 mongodump和mongorestore基本使用

  1. 全库备份
[mongod@db01 /mongodb/backup]$ mongodump -uroot -proot123 --port 27017 --authenticationDatabase admin -o /mongodb/backup/ful
  1. 单库备份
[mongod@db01 /mongodb/backup]$ mongodump -uroot -proot123 --port 27017 --authenticationDatabase admin -d along  -o /mongodb/backup/part1
  1. 单表备份
mongodump -uroot -proot123 --port 27017 --authenticationDatabase admin -d along -c log   -o /mongodb/backup/part2
  1. 压缩备份
[mongod@db01 /mongodb/backup/full]$ mongodump -uroot -proot123 --port 27017 --authenticationDatabase admin   -o /mongodb/backup/full --gzip
  1. 全库恢复
[mongod@db01 ~]$ mongorestore -uroot -proot123 --port 27017 --authenticationDatabase admin --drop /mongodb/backup/full --gzip
  1. 从全备中恢复单库数据
mongorestore -uroot -proot123 --port 27017 --authenticationDatabase admin -d along --drop /mongodb/backup/full/along --gzip
  1. 全备中恢复单表
[mongod@db01 /mongodb/backup/full/along]$ mongorestore -uroot -proot123 --port 27017 --authenticationDatabase admin -d test -c t1   --drop /mongodb/backup/full/along/log.bson.gz  --gzip
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,670评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,928评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,926评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,238评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,112评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,138评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,545评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,232评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,496评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,596评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,369评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,226评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,600评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,906评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,185评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,516评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,721评论 2 335

推荐阅读更多精彩内容