2022MongoDB1-docker安装mongodb

1MongoDB介绍:

一个数据库可以理解成一个文件夹,一张表就是一个collection集合,表内的一行数据就是一个document文档,表中的每一个字段在mongo中被称为一个field域,mongodb只支持单表查询

在mysql中一行数据就是一个订单,在mongodb中一个字典(object)就是一个订单

Mongo支持的角色:

read只读:允许用户读取指定的数据库
readWrite 读写:允许用户读写指定的数据库
dbAdmin 数据库管理:允许用户在指定的数据库中执行管理函数,如索引创建,删除,查看,统计或访问system.profile
userAdmin 用户管理:允许用户向system.users集合写入,可以在指定数据库里创建,删除和管理用户
clusterAdmin 集群管理:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限
readAnyDatabase 任意库读:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase 任意库读写:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase 用户管理任意库:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase 数据库管理任意库:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限
root 只在admin数据库中可用,超级账号,超级权限

2Docker安装MongoDB:

复制代码
#拉取镜像
[root@db01 ~]#docker pull mongo:4.2.6
#创建一个需要密码登录的mongodb容器
[root@db01 ~]#docker run -d --name mongod -p 27017:27017 mongo:4.2.6 --auth
#查看容器的启动时间
[root@db01 ~]#docker container ls
#查看日志是否启动完毕
[root@db01 ~]#docker logs mongod -f
#进入容器
[root@db01 ~]#docker exec -it mongod /bin/bash
root@6533ac116da1:/# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
root@6533ac116da1:/# ls /usr/bin |grep mongo
mongo#客户端
mongod#服务器
mongodump
mongoexport
mongofiles
mongoimport
mongorestore
mongos
mongostat
mongotop
root@6533ac116da1:/# 
#进入数据库
root@6533ac116da1:/# mongo
MongoDB shell version v4.2.6
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("54789f2f-f3f1-41a6-80d8-99a8d554ef4a") }
MongoDB server version: 4.2.6
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
    http://docs.mongodb.org/
Questions? Try the support group
    http://groups.google.com/group/mongodb-user
> show dbs
> show databases;
> exit
bye
root@6533ac116da1:/# 
#进入mongod容器后执行mongo admin可以直接进入到admin库
[root@db01 ~]#docker exec -it mongod mongo admin
MongoDB shell version v4.2.6
connecting to: mongodb://127.0.0.1:27017/admin?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("fbbbf64d-4b3a-4f2a-a3d6-a180f03282a5") }
MongoDB server version: 4.2.6
> 
复制代码

3使用MongoDB注意事项:

1)所有的管理命令必须在admin库中处理(docker exec -it mongod mongo admin),例如创建一个用户,用户的角色是root,用户所属的数据库是root

复制代码
[root@db01 ~]#docker exec -it mongod mongo admin
MongoDB shell version v4.2.6
connecting to: mongodb://127.0.0.1:27017/admin?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("b8726b6e-e293-4798-b4f0-2336a086ef3e") }
MongoDB server version: 4.2.6
#创建用户
> db.createUser({user:"tyjs09",pwd:"123456",roles:[{role:"root",db:"admin"}]});
Successfully added user: {
    "user" : "tyjs09",
    "roles" : [
        {
            "role" : "root",
            "db" : "admin"
        }
    ]
}
#认证用户
> db.auth("tyjs09","123456");
1
#查看所有用户
> show users;
{
    "_id" : "admin.tyjs09",
    "userId" : UUID("2d5a8a50-f67f-4eae-9970-76447ab72bb4"),
    "user" : "tyjs09",
    "db" : "admin",
    "roles" : [
        {
            "role" : "root",
            "db" : "admin"
        }
    ],
    "mechanisms" : [
        "SCRAM-SHA-1",
        "SCRAM-SHA-256"
    ]
}
#查看所有数据库
> show dbs;
admin   0.000GB
config  0.000GB
local   0.000GB
#查看所有表
> show tables
system.users
system.version
#查看用户的所有信息
> db.system.users.find()
{ "_id" : "admin.tyjs09", "userId" : UUID("2d5a8a50-f67f-4eae-9970-76447ab72bb4"), "user" : "tyjs09", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "OqPLIqn5VJMERluH15DbNA==", "storedKey" : "h8aV8rnjhxSGYtBjHUzQCsF5Hfs=", "serverKey" : "LJLc4p5DTUrZFenA1jAnMSa8saI=" }, "SCRAM-SHA-256" : { "iterationCount" : 15000, "salt" : "2JR9avvSuT42gmq/dPgrUm+GUP4YskYhET0JOw==", "storedKey" : "MtBVkwsH+HSJFqNr1ZGzHpS4SjVBq/LYwb1N6BDoSu8=", "serverKey" : "vMliQIoaN/K8TzMUDfuVOjYGRxLv+ePAcDYN9KbTxb8=" } }, "roles" : [ { "role" : "root", "db" : "admin" } ] }
> 
然后你就可用用navicat远程连接你创建的这个tyjs09的用户了
复制代码

 2)每次进入数据库操作都要先进入admin库里进行用户认证,否则你啥也干不了,例如:

复制代码
#宕机了,找到要启动的镜像
[root@db01 ~]#docker ps -qa
6533ac116da1
#启动镜像
[root@db01 ~]#docker start 6533
6533
#查看镜像是否已经启动为容器
[root@db01 ~]#docker ps
CONTAINER ID   IMAGE         COMMAND                  CREATED        STATUS         PORTS                                           NAMES
6533ac116da1   mongo:4.2.6   "docker-entrypoint.s…"   11 hours ago   Up 5 seconds   0.0.0.0:27017->27017/tcp, :::27017->27017/tcp   mongod
#进度mongodb数据库里的admin库
[root@db01 ~]#docker exec -it mongod mongo admin
#登陆数据库后直接操作报错
> show users;
2022-01-07T20:53:08.155+0000 E  QUERY    [js] uncaught exception: Error: command usersInfo requires authentication :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
DB.prototype.getUsers@src/mongo/shell/db.js:1638:15
shellHelper.show@src/mongo/shell/utils.js:883:9
shellHelper@src/mongo/shell/utils.js:790:15
@(shellhelp2):1:1
#登陆数据库后直接操作报错
> db.user.find()
Error: error: {
    "ok" : 0,
    "errmsg" : "command find requires authentication",
    "code" : 13,
    "codeName" : "Unauthorized"
}
#认证用户后操作正常
> db.auth("tyjs09","123456");
1
> show users;
{
    "_id" : "admin.tyjs09",
    "userId" : UUID("2d5a8a50-f67f-4eae-9970-76447ab72bb4"),
    "user" : "tyjs09",
    "db" : "admin",
    "roles" : [
        {
            "role" : "root",
            "db" : "admin"
        }
    ],
    "mechanisms" : [
        "SCRAM-SHA-1",
        "SCRAM-SHA-256"
    ]
}
> 
复制代码

 

posted @   linuxTang  阅读(169)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2021-01-07 2mysql初始化及多实例案例
点击右上角即可分享
微信分享提示