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 搭建过程 数据管理语句(集合管理 创建信息 删除信息 查看信息) 权限配置 复制集构建
本文来自博客园,作者:丁志岩,转载请注明原文链接:https://www.cnblogs.com/dezyan/p/18887695

浙公网安备 33010602011771号