nodejs学习-day05

day05-mongodb学习

mongo容器进入

//生成启动容器
docker run -itd --name mongo  -p 27017:27017 mongo
//进入容器---下面两个都可以
docker exec -it mongo /bin/bash
docker exec -it mongo admin  //有账户密码admin,123456

redis容器进入方法

//生成启动容器
docker run -itd --name redis -p 27017:27017 redis
//进入容器----下面两个都可以
docker exec -it redis /bin/bash
docker exec -it redis的id /bin/bash

mysql一样方法进入

//安装mysql
docker pull mysql
//生成启动容器,并设置密码
docker run -itd --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
//进入容器----下面两个都可以
docker exec -it mysql /bin/bash
docker exec -it mysql的id /bin/bash
//进入mysql后,通过账号密码进入
 >mysql -h localhost -u root -p
 >Enter password:
 >show databases;             //展示所有数据库
 >use databasesName;          //切换数据库    
 >show tables;                //展示所有表
 >show columns from tableName;//展示表创建信息
 >select * from tableName;    //查询表中所有信息

git bash里面启动的话
使用docker exec -it mysql /bin/bash会报错
the input device is not a TTY. If you are using mintty, try prefixing the command with 'winpty'

//这个命令才可以
winpty docker exec -it mysql bash

nodejs中使用MySQL连不上报错:

Unhandled rejection SequelizeConnectionError: Client does not support authentication protocol requested by server; consider upgrading MySQL client
解决办法:

//1、查看用户信息
select host,user,plugin,authentication_string from mysql.user;
//2、修改用户密码
//更新user为root,host为% 的密码为123456
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
//更新user为root,host为localhost 的密码为123456
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
//刷新权限
FLUSH PRIVILEGES;

在这里插入图片描述

-----------------------------------------------分割线-----------------------------------------------------------

表就是关系(表与表之间存在的关系)

  • 所有的关系型数据库都需要通过sql语言操作
  • 所有的关系型数据库在操作之前都需要设计表结构
  • 数据表还支持约束
    • 唯一的
    • 主键
    • 默认值
    • 非空
  • 非关系型数据库非常的灵活
  • 有的非关系型数据库就是key-value(键值对)
  • mongodb是长的最像关系型数据库的非关系型数据库
    • mongodb不需要设计表结构
    • 可以任意往里面存数据,没有结构这一说

基本使用:
nodeJs中

npm i mongoose

启动MongoDb镜像

# 拉取官方镜像
docker pull mongo
# 启动mongo镜像
docker run -itd --name mongo -p 27017:27017 mongo
  ★ -p 27017:27017 :映射容器服务的 27017 端口到宿主机的 27017 端口。外部可以直接通过 宿主机 ip:27017 访问到 mongo 的服务。
  ★ --name :起别名
#  启动/暂停容器
docker start/stop mongo
# 查看mongo进程
docker ps -a

进入容器并启动mongo,如下

# 1.登录到 MongoDB 容器中
 docker exec -it (容器CONTAINER ID) mongo admin
 # 添加管理员账号
 db.createUser( {user: "admin",pwd: "密码",roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]})
 # 进行验证
 db.auth("admin","密码");
# 一些命令:
show dbs  (或者使用show databases  查看当前数据库情况,默认在test下)
db dbname (查看当前连接在哪个数据库)
db.site.insert({"name":"test"}) (创建数据库)
db.createUser( {user: "admin",pwd: "123456",roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]})  (创建用户)
db admin
db.auth("admin", "123456")  (切换用户)

添加管理用户

db.createUser( {user: "admin",pwd: "123456",roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]})

具体角色:

  • Read:允许用户读取指定数据库 readWrite:允许用户读写指定数据库
  • dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
  • userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
  • clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
  • readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
  • readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
  • userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
  • dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
  • root:只在admin数据库中可用。超级账号,超级权限。
    刚建立了 userAdminAnyDatabase 角色,用来管理用户,可以通过这个角色来创建、删除用户

添加普通数据库用户

db.createUser({ user:"temp",pwd:"123",roles:[{ role: "readWrite",db:"test"}]})

事实是,MongoDB的用户权限和数据库是绑定的。也就是创建一个新的数据库,并在数据库中插入数据的正确操作应该是需要创建与之对应的用户,下面退出MongoDB命令行模式,重新进入:

 1.  输入`use admin`,进入admin数据库,root用户需要在admin数据库中认证。 
 2.  输入db.auth('root','root')超级用户进行认证  
 3.  输入db.createUser({user: "temp",pwd: "123456",roles: [ { role: "readWrite", db: "test" } ]} )创建temp用户,并为它指定数据库为test。
 4. 输入db.auth('okevin','123456')切换认证用户。  
 5. 输入use recommended切换至recommended数据库 
 6. 输入db.repo.insert({"name":"kevin"}),创建一条数据

这才是创建一个数据库,并插入一条数据库的正确姿势,并且一定记住几点:
数据库和用户是绑定的,光创建一个超级用户并不能操作在其他新建的数据库中插入数据
在切换数据库时,先切换认证用户,不然会出现too many users are authenticated的错误。

参考博客:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值