2022MongoDB1-docker安装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 |
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" ] } >
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2021-01-07 2mysql初始化及多实例案例