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: --pid文件的位置,一般不用配置,可以去掉这行,自动生成到data中
--网络配置有关
net:
bindIp: -- 监听地址
port: -- 端口号,默认不配置端口号,是27017
-- 安全验证有关配置
security:
authorization: enabled --是否打开用户名密码验证
------------eg:如下例----------
cat > /mongodb/conf/mongo.conf <
4.用户、角色及权限管理
mongodb用户及权限管理
MongoDB用户和角色解释系列(上)
MongoDB用户和角色解释系列(下)
4.1 注意事项
验证库: 建立用户时use到的库,在使用用户时,要加上验证库才能登陆。对于管理员用户,必须在admin下创建.
- 建用户时,use到的库,就是此用户的验证库
- 登录时,必须明确指定验证库才能登录
- 通常,管理员用的验证库是admin,普通用户的验证库一般是所管理的库设置为验证库
- 如果直接登录到数据库,不进行use,默认的验证库是test,不是我们生产建议的.
- 从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: "",
privileges: [
{ resource: { }, actions: [ "", ... ] },
...
],
roles: [
{ role: "", db: "" } | "",
...
],
authenticationRestrictions: [
{
clientSource: ["" | "", ...],
serverAddress: ["" | "", ...]
},
...
]
}
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: "",
pwd: "",
customData: { },
roles: [
{ role: "", db: "" } | "",
...
],
authenticationRestrictions: [
{
clientSource: ["" | "", ...]
serverAddress: ["" | "", ...]
},
...
],
mechanisms: [ "", ... ],
passwordDigestor: ""
}
-- 基本语法说明:
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: 恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用哦!
: mongorestore 最后的一个参数,设置备份数据所在位置,例如:c:\data\dump\test。你不能同时指定 和 --dir 选项,--dir也可以设置备份目录。
--dir: 指定备份的目录;你不能同时指定 和 --dir 选项
--authenticationDatabase :验证数据库名称
5.4 mongodump和mongorestore基本使用
- 全库备份
[mongod@db01 /mongodb/backup]$ mongodump -uroot -proot123 --port 27017 --authenticationDatabase admin -o /mongodb/backup/ful
- 单库备份
[mongod@db01 /mongodb/backup]$ mongodump -uroot -proot123 --port 27017 --authenticationDatabase admin -d along -o /mongodb/backup/part1
- 单表备份
mongodump -uroot -proot123 --port 27017 --authenticationDatabase admin -d along -c log -o /mongodb/backup/part2
- 压缩备份
[mongod@db01 /mongodb/backup/full]$ mongodump -uroot -proot123 --port 27017 --authenticationDatabase admin -o /mongodb/backup/full --gzip
- 全库恢复
[mongod@db01 ~]$ mongorestore -uroot -proot123 --port 27017 --authenticationDatabase admin --drop /mongodb/backup/full --gzip
- 从全备中恢复单库数据
mongorestore -uroot -proot123 --port 27017 --authenticationDatabase admin -d along --drop /mongodb/backup/full/along --gzip
- 全备中恢复单表
[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