06-MongoDB数据库

MongoDB数据库

mongodb非关系数据库安装部署
主要适合海量数据进行存储和调取应用场景 -- 银行/大厂
对比mysql mysql具有特性 mongodb都具有

mongodb非关系数据库安装部署

步骤一:下载软件程序包

centos7系统:  https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.24.tgz  
kylin v10系统:https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel80-4.2.24.tgz

步骤二:准备软件安装环境(可选)

vim /etc/rc.local
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi

步骤三:安装数据库程序

cd /usr/local/  -- 将mongodb程序包进行上传到系统中
ll mongodb-linux-x86_64-rhel70-4.2.24.tgz
tar xf mongodb-linux-x86_64-rhel70-4.2.24.tgz
ln -s mongodb-linux-x86_64-rhel70-4.2.24 mongodb
vim /etc/profile
export PATH="$PATH:/usr/local/mysql/bin:/usr/local/redis/src:/usr/local/mongodb/bin"
source /etc/profile

mkdir -p /mongodb/conf   --- 保存配置文件
mkdir -p /mongodb/log    --- 保存日志文件
mkdir -p /mongodb/data   --- 保存数据文件

步骤四:启动数据库程序

方式一:直接利用mongod命令加载参数信息启动

mongod --dbpath=/mongodb/data --logpath=/mongodb/log/mongodb.log --port=27017 --logappend --fork

方式二:加载配置文件启动数据库程序

vim /mongodb/conf/mongo.conf
-- YAML 模式  ansible YAML-playbook
-- Note:YAML does not support tab characters for indentation:use space instead
-- 系统日志有关配置
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:
   port: 27017                                 -- 端口号,默认不配置端口号,是27017
   bindIp: 10.0.0.51,127.0.0.1                 -- 监听地址
-- 安全验证有关配置
security:
   authorization: enabled                      -- 是否打开用户名密码验证


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
   pidFilePath: "/mongodb/data/mongo.pid"
net:
   port: 27017
   bindIp: 10.0.0.51,127.0.0.1
EOF

mongod -f /mongodb/conf/mongo.conf

mongodb非关系数据库基础管理

数据库操作

  • 创建数据库:
    use dezyan -- 切换库同时创建库
  • 删除数据库:
    db.dropDatabase() -- 删除数据库
  • 查看数据库
    show databases
    show dbs

数据表操作(集合操作)

  • 创建数据表 (没有 数据类型 约束属性信息设置 字段信息设置)
    db.createCollection("t1");
  • 查看数据表
    show tables
  • 删除数据表
    db.t1.drop()

数据字段操作(文档操作)

use dezyan
-- 创建数据

> db.t1.insert({name:"zhangsan"})
> WriteResult({ "nInserted" : 1 })
> db.t1.insert({name:"lisi",age:20})
> WriteResult({ "nInserted" : 1 })
> db.t1.insert({age:20,gender:"男",info:"abcd"})
> WriteResult({ "nInserted" : 1 })
> -- 删除数据
> db.t1.remove({name:"zhangsan"})   -- 删除指定行数据
> db.t1.remove({})                  -- 删除全部数据
> -- 查看数据 
> db.t1.find()
> { "_id" : ObjectId("67ceb53fcdcb180dbdbcad07"), "name" : "lisi", "age" : 20 }
> { "_id" : ObjectId("67ceb572cdcb180dbdbcad08"), "age" : 20, "gender" : "男", "info" : "abcd" }
> db.t1.find({info:"abcd"})
> { "_id" : ObjectId("67ceb572cdcb180dbdbcad08"), "age" : 20, "gender" : "男", "info" : "abcd" }

for(i=0;i<10000;i++){db.t1.insert({"uid":i,"name":"mongodb","age":6,"date":new Date()})}
DBQuery.shellBatchSize=10000;  -- 调整显示的行数信息 

> db.t1.find().pretty()   -- 调整输出信息方式,以json文档形式显示输出内容
> {
> "_id" : ObjectId("67ceb53fcdcb180dbdbcad07"),
> "name" : "lisi",
> "age" : 20
> }

mongodb非关系数据库权限配置

1)可以创建不同用户管理数据库不同数据信息
2)可以实现远程管理数据库

权限管理设置:(创建用户/设置权限)

创建并设置权限语法结构:

use admin -- 创建用户或设置权限时,需要切换到指定数据库下

  • 管理用户创建,切换到admin数据库中,进行管理员用户创建并授权
  • 业务用户创建,切换到指定数据库中,进行业务用户创建并授权
> db.createUser(
> user: "<name>"                    -- 创建用户名称
> pwd: "<cleartext password>"       -- 设置用户密码
> roles: [                          -- 角色权限设置 新来员工 -- 运维工程师(统一)  运维主管(统一) 运维经理(统一权限)
>    { role: "<role>", 
>    db: "<database>" } | "<role>",
>    ...
>    ]
> )
> mongodb常用角色信息:
> root:		具有此角色,可以随意操作管理数据库服务(等价于具有管理员权限)
> readwrite: 具有此角色,可以操作管理指定数据库,进行读写操作
> read:		具有此角色,可以操作管理指定数据库,进行只读操作

基本语法信息说明

user:用户名
pwd:密码信息
roles:
      role: 角色名
      db: 作用对象
eg: role:root, readWrite, read

创建管理员用户:

> use admin
> switched to db admin
> db.createUser(
> {
>   user: "xiaoA",
>   pwd: "xiaoA123",
>   roles: [ { role: "root", db: "admin" } ]
> }
> )

创建业务用户:

use dezyan   -- 验证库
switched to db dezyan
> db.createUser(
> {
>   user: "xiaoB",
>   pwd: "xiaoB123",
>   roles: [ { role: "readWrite", db: "dezyan" } ]
> }
> )

> db.createUser(
> {
>   user: "xiaoC",
>   pwd: "xiaoC123",
>   roles: [ { role: "read", db: "dezyan" } ]
> }
> )

查看用户信息:

> use admin 
> db.system.users.find().pretty()  

应用用户进行登录操作:

管理员
mongo -uroot -proot123
-- 本地登录
mongo -uroot -proot123 10.0.0.51:27017
-- 远程登录

业务用户登录失败
2025-03-10T19:41:58.446+0800 E  QUERY    [js] Error: Authentication failed. :  -- 需要添加验证库信息
mongo -uxiaoB -pxiaoB123 dezyan
-- 普通用户本地登录(需要添加验证库信息)
mongo -uxiaoB -pxiaoB123 10.0.0.51:27017/dezyan
-- 普通用户远程登录(需要添加验证库信息)

删除用户信息

> use dezyan
> switched to db dezyan
> db.dropUser("xiaoC")
> false
> use admin
> switched to db admin
> db.dropUser("xiaoC")
> false
> use dezyan           -- 切换到用户对应验证库中
> switched to db dezyan
> db.dropUser("xiaoC") -- 删除用户信息
> true

mongodb非关系数据库主从架构(高可用架构) -- mysql 实现全同步原理

步骤一:创建主从实例

创建多实例目录

mkdir -p /mongodb/28017/conf /mongodb/28017/data /mongodb/28017/log
mkdir -p /mongodb/28018/conf /mongodb/28018/data /mongodb/28018/log
mkdir -p /mongodb/28019/conf /mongodb/28019/data /mongodb/28019/log

创建多实例配置文件

cat > /mongodb/28017/conf/mongod.conf << EOF
systemLog:
   destination: file
   path: "/mongodb/28017/log/mongodb.log"
   logAppend: true
storage:
   journal:
       enabled: true
   dbPath: "/mongodb/28017/data"
   directoryPerDB: true
   #engine: wiredTiger
   wiredTiger:
        engineConfig:
             cacheSizeGB: 1
             directoryForIndexes: true
        collectionConfig:
             blockCompressor: zlib
        indexConfig:
             prefixCompression: true
processManagement:
   fork: true
net:
   port: 28017
   bindIp: 10.0.0.51,127.0.0.1
replication:
   oplogSizeMB: 2048        -- 定义oplog日志存储量,实质是数据库服务的表的大小,因为同步用的日志存储在表中
   replSetName: my_repl     -- 表示复制集的名称,要和后面创建的集群名称一致
-- 表示设置复制集功能
EOF


cat > /mongodb/28017/conf/mongod.conf << EOF
systemLog:
   destination: file
   path: "/mongodb/28017/log/mongodb.log"
   logAppend: true
storage:
   journal:
       enabled: true
   dbPath: "/mongodb/28017/data"
   directoryPerDB: true
   #engine: wiredTiger
   wiredTiger:
        engineConfig:
             cacheSizeGB: 1
             directoryForIndexes: true
        collectionConfig:
             blockCompressor: zlib
        indexConfig:
             prefixCompression: true
processManagement:
   fork: true
net:
   port: 28017
   bindIp: 10.0.0.51,127.0.0.1
replication:
   oplogSizeMB: 2048
   replSetName: my_repl
EOF

\cp /mongodb/28017/conf/mongod.conf /mongodb/28018/conf/
\cp /mongodb/28017/conf/mongod.conf /mongodb/28019/conf/

sed -i 's#28017#28018#g' /mongodb/28018/conf/mongod.conf
sed -i 's#28017#28019#g' /mongodb/28019/conf/mongod.conf


mongod -f /mongodb/28017/conf/mongod.conf
mongod -f /mongodb/28018/conf/mongod.conf
mongod -f /mongodb/28019/conf/mongod.conf

步骤二:进行主从配置

mongo --port 28017 admin
config = {_id: 'my_repl', members: [
                                          {_id: 0, host: '10.0.0.51:28017'},
                                          {_id: 1, host: '10.0.0.51:28018'},
                                          {_id: 2, host: '10.0.0.51:28019'}] 
                }
				
-- 以上操作信息等价于 change master to				
				
				
rs.initiate(config)    -- rs-replication-set(复制集)
-- 以上操作信息等价于 start slave

步骤三:查看主从状态,并验证主从同步

rs.status()
-- 查看整体复制集状态信息
rs.isMaster()
-- 查看主节点状态信息

添加删除节点(从库节点)

mongo --port 28017 admin
rs.add("10.0.0.51:28019")
rs.status();
-- 注意添加实例节点必须运行启动 其次需要编写配置文件信息,具有相同rs名称信息
replication:
   oplogSizeMB: 2048
   replSetName: my_repl  

rs.remove("10.0.0.51:28019")
rs.status();

mysql  操作部分-原理 索引-原理 事务-原理
redis  主从配置 集群配置 哨兵配置 持久化存储
mongod 搭建过程 数据管理语句(集合管理 创建信息 删除信息 查看信息) 权限配置  复制集构建
posted @ 2025-05-20 19:39  丁志岩  阅读(18)  评论(0)    收藏  举报