mongodb逻辑结构

Mongodb 逻辑结构         MySQL逻辑结构
库 (database) 库
集合(collection) 表
文档(document) 数据行

安装部署

1 系统准备

1 这里用的mongodb版本是3.6.12
2 redhat或centos6.2以上系统
3 系统开发包完整
4 ip地址和hosts文件解析正常
5 iptables防火墙&SElinux关闭
6 关闭大页内存机制 root用户下
在vi /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 临时关闭:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
cat /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/defrag 其他系统关闭参照官方文档:
https://docs.mongodb.com/manual/tutorial/transparent-huge-pages/ 为什么要关闭?
You should disable THP on Linux machines to ensure best performance with MongoDB.

2 mongodb安装

创建所需用户和组
useradd mongod
passwd mongod 创建mongodb所需目录结构
mkdir -p /mongodb/conf
mkdir -p /mongodb/log
mkdir -p /mongodb/data 上传并解压软件到指定位置
cd /server/tools/
tar xf mongodb-linux-x86_64-rhel70-3.6.12.tgz
cp -r /server/tools/mongodb-linux-x86_64-rhel70-3.6.12/bin/ /mongodb 设置目录结构权限
chown -R mongod:mongod /mongodb 设置用户环境变量
[root@db01 mongodb]# su - mongod
[mongod@db01 ~]$ vi .bash_profile
export PATH=/mongodb/bin:$PATH
[mongod@db01 ~]$ source .bash_profile 启动mongodb
mongod --dbpath=/mongodb/data --logpath=/mongodb/log/mongodb.log --port=27017 --logappend --fork 登录mongodb
[mongod@server2 ~]$ mongo
或者
[mongod@server2 ~]$ mongo 127.0.0.1:27017 注:连接之后会有warning,需要修改(使用root用户)
vim /etc/security/limits.conf
#* - nofile 65535
reboot重启生效 ############################################################################################
使用配置文件
[mongod@db01 ~]$ vim /mongodb/conf/mongodb.conf
logpath=/mongodb/log/mongodb.log
dbpath=/mongodb/data
port=27017
logappend=true
fork=true 使用配置文件启动mongodb
mongod -f /mongodb/conf/mongodb.conf
关闭mongodb
mongod -f /mongodb/conf/mongodb.conf --shutdown
############################################################################################ YAML模式
YAML does not support tab characters for indentation: use spaces instead.
YAML不支持缩进的制表符:请改用空格。 -- 系统日志有关
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:
bindIp: <ip> -- 监听地址
port: <port> -- 端口号,默认不配置端口号,是27017 -- 安全验证有关配置
security:
authorization: enabled -- 是否打开用户名密码验证 ------------------以下是复制集与分片集群有关----------------------------
replication:
oplogSizeMB: <NUM>
replSetName: "<REPSETNAME>"
secondaryIndexPrefetch: "all" sharding:
clusterRole: <string>
archiveMovedChunks: <boolean> ---for mongos only
replication:
localPingThresholdMs: <int> sharding:
configDB: <string>
-------------------------------------------------------------------- # YAML例子
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
net:
port: 27017
bindIp: 10.0.0.51,127.0.0.1
EOF 启动和停止mongodb
mongod -f /mongodb/conf/mongo.conf
mongod -f /mongodb/conf/mongo.conf --shutdown mongodb 使用systemd管理
cat > /etc/systemd/system/mongod.service <<EOF
[Unit]
Description=mongodb
After=network.target remote-fs.target nss-lookup.target
[Service]
User=mongod
Type=forking
ExecStart=/mongodb/bin/mongod --config /mongodb/conf/mongo.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/mongodb/bin/mongod --config /mongodb/conf/mongo.conf --shutdown
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF [root@db01 ~]# systemctl restart mongod
[root@db01 ~]# systemctl stop mongod
[root@db01 ~]# systemctl start mongod

mongodb常用操作

mongodb 默认存在的库
test :登录时默认存在的库
admin :系统预留库,MongoDB系统管理库
local :本地预留库,存储关键日志
config :MongoDB配置信息库 show databases/show dbs
show tables/show collections
use admin
db/select database() db 对象相关命令
db.[TAB][TAB]
db.help()
db.oldboy.[TAB][TAB]
db.oldboy.help() rs 复制集有关(replication set)
rs.[TAB][TAB]
rs.help() sh 分片集群(sharding cluster)
sh.[TAB][TAB]
sh.help() 库的操作
> use test
>db.dropDatabase() 删库跑路
{ "dropped" : "test", "ok" : 1 } 集合的操作
方法1
admin> use app
app> db.createCollection('a')
{ "ok" : 1 }
app> db.createCollection('b') 方法2:当插入一个文档的时候,一个集合就会自动创建。
use oldboy
db.test.insert({name:"zhangsan"})
db.stu.insert({id:101,name:"zhangsan",age:20,gender:"m"})
show tables;
db.stu.insert({id:102,name:"lisi"})
db.stu.insert({a:"b",c:"d"})
db.stu.insert({a:1,c:2}) 文档操作
数据录入:
for(i=0;i<10000;i++){db.log.insert({"uid":i,"name":"mongodb","age":6,"date":new
Date()})} 查询数据行数:
> db.log.count() 全表查询:
> db.log.find() 每页显示50条记录:
> DBQuery.shellBatchSize=50; 按照条件查询
> db.log.find({uid:999}) 以标准的json格式显示数据
> db.log.find({uid:999}).pretty()
{
"_id" : ObjectId("5cc516e60d13144c89dead33"),
"uid" : 999,
"name" : "mongodb",
"age" : 6,
"date" : ISODate("2019-04-28T02:58:46.109Z")
} 删除集合中所有记录
app> db.log.remove({}) 查看集合存储信息
app> db.log.totalSize() //集合中索引+数据压缩存储之后的大小 重命名集合
//把log改名为log1
app> db.log.renameCollection("log1")
{ "ok" : 1 }
app> show collections
a b c
log1
app

用户和权限管理

1 注意
验证库: 建立用户时use到的库,在使用用户时,要加上验证库才能登陆
对于管理员用户,必须在admin下创建.
1. 建用户时,use到的库,就是此用户的验证库
2. 登录时,必须明确指定验证库才能登录
3. 通常,管理员用的验证库是admin,普通用户的验证库一般是所管理的库设置为验证库
4. 如果直接登录到数据库,不进行use,默认的验证库是test,不是我们生产建议的.
5. 从3.6版本开始,不添加bindIp参数,默认不让远程登录,只能本地管理员登录 2 用户创建语法
use admin
db.createUser
{
user: "<name>",
pwd: "<cleartext password>",
roles: [
{ role: "<role>",
db: "<database>" } | "<role>",
...
]
} 基本语法说明:
user:用户名
pwd:密码
roles:
role:角色名
db:作用对象
role:root, readWrite,read
验证数据库:
mongo -u oldboy -p 123 10.0.0.53/oldboy 3 用户管理例子
创建超级管理员:管理所有数据库(必须use admin再去创建)
$ mongo
use admin
db.createUser(
{
user: "root",
pwd: "root123",
roles: [ { role: "root", db: "admin" } ]
}
) 验证用户
db.auth('root','123') 配置文件中,加入以下配置
security:
authorization: enabled 重启mongodb
mongod -f /mongodb/conf/mongo.conf --shutdown
mongod -f /mongodb/conf/mongo.conf 登录验证
mongo -uroot -p123 # 注意这个登录是未验证成功的,需要去验证
mongo -uroot -p123 10.0.0.51/admin 或者
mongo
use admin
db.auth('root','root123') 查看用户
use admin
db.system.users.find().pretty() 创建应用用户
use oldboy
db.createUser(
{
user: "app01",
pwd: "app01",
roles: [ { role: "readWrite" , db: "oldboy" } ]
}
) mongo -uapp01 -papp01 10.0.0.51/oldboy 查询mongodb中的用户信息
mongo -uroot -p123 10.0.0.51/admin
db.system.users.find().pretty() 4 删除用户(root身份登录,use到验证库)
# 在root用户下进行
# 创建用户
use oldboy1
db.createUser({user: "app02",pwd: "app02",roles: [ { role: "readWrite" , db: "oldboy1" } ]}) # 查询用户
use admin
db.system.users.find().pretty() # 删除用户
use oldboy1
db.dropUser("app02") 5 用户管理注意事项
1. 建用户要有验证库,管理员admin,普通用户是要管理的库
2. 登录时,注意验证库
mongo -uapp01 -papp01 10.0.0.51:27017/oldboy
3. 重点参数
net:
port: 27017
bindIp: 10.0.0.51,127.0.0.1
security:
authorization: enabled

MongoDB-01-基础的更多相关文章

  1. Java 之 I/O 系列 01 ——基础

    Java 之 I/O 系列 目录 Java 之 I/O 系列 01 ——基础 Java 之 I/O 系列 02 ——序列化(一) Java 之 I/O 系列 02 ——序列化(二) 整理<疯狂j ...

  2. 一点MongoDB的基础及mongodb在mac上的安装

    最近发现维持写博客的习惯还是挺困难的,尤其对我来说,计划好的事过了好长时间才想到要去做. 这段时间一直在熟悉MongoDB,首先我是参考的这一篇:8天学通MongoDB   原博主写得非常好,我这里就 ...

  3. linux 01 基础命令

    linux 01 基础命令 对于Linux要记住一个概念,一切皆文件,哪怕是目录,也是一个文件 1.修改用户密码 sudo passwd pyvip@Vip:~$ #pyvip表示用户名, Vip表示 ...

  4. Mongodb最基础入门教程

      Mongodb最基础入门教程 如果想了解一下redis的入门教程,可以去看一下我的上一篇博客 Mongodb的安装大家可以参考一下其他博主的博客,这里我就不做介绍了.不过值得注意的是,在Linux ...

  5. 01.基础架构:一条SQL查询语句是如何执行的?学习记录

    01.基础架构:一条SQL查询语句是如何执行的?学习记录http://naotu.baidu.com/file/1c8fb5a0f2497c3a2655fed89099cb96?token=ff25d ...

  6. 01 基础版web框架

    01 基础版web框架 服务器server端python程序(基础版): import socket server=socket.socket() server.bind(("127.0.0 ...

  7. MongoDB学习——基础入门

    MongoDB--基础入门 MongoDB是目前比较流行的一种非关系型数据库(NoSql),他的优势这里不废话,我们关注怎么使用它. 安装 下载,首先肯定要去下载,我们去官网下载,在国内,可能没FQ可 ...

  8. mongodb 索引基础

    一 .索引基础:    MongoDB的索引几乎与传统的关系型数据库一模一样,这其中也包括一些基本的优化技巧.下面是创建索引的命令:    > db.test.ensureIndex({&quo ...

  9. NOSQL学习笔记系列之MongoDB 一 基础

    主题:MongoDB 学习资料参考网址: 1.http://www.w3cschool.cc/mongodb/mongodb-tutorial.html 2.http://www.icoolxue.c ...

  10. PHP学习笔记01——基础语法

    <!DOCTYPE html> <html> <?php // 1.使用$加变量名来表示变量,php是弱类型语言,不要求在使用变量前声明,第一次赋值时变量才被创建 $a ...

随机推荐

  1. 删除有序数组中的重复项II

    题目描述 给你一个有序数组 nums ,请你原地删除重复出现的元素,使每个元素最多出现两次,返回删除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组 并在使用O(1)额外空间的条件下 ...

  2. C# 8.0和.NET Core 3.0高级编程 分享笔记二:编程基础第一部分

    基础部分被我分为了2篇,因为实在太多了,但是每一个知识点我都不舍得删除,所以越写越多,这一篇博客整理了4个夜晚,内容有点多建议慢慢看.本章涵盖以下主题: 介绍C# 理解C#的基础知识 使用变量 处理空 ...

  3. spring cloud 微服务介绍(转)

    一.理解微服务   我们通过软件架构演进过程来理解什么是微服务,软件架构的发展经历了从单体结构.垂直架构.SOA架构到微服务架构的过程. 1. 单体架构 1.1 特点(1)所有的功能集成在一个项目工程 ...

  4. 关闭火狐浏览器中的Pocket功能

    在火狐(Firefox)浏览器中,默认右键菜单和菜单栏都会有 Pocket按钮 .但是大部分国内用户都不会使用Pocket服务,看着还十分碍眼. 在工具栏的图标还可以通过定制工具栏修改,但是右键菜单中 ...

  5. libzip开发笔记(二):libzip库介绍、ubuntu平台编译和工程模板

    前言   Qt使用一些压缩解压功能,选择libzip库,libzip库比较原始,也是很多其他库的基础支撑库,编译过了windows版本,有需求编译一个ubuntu版本的,交叉编译需求的同样可参照本文章 ...

  6. excel vslookup应用举例

    excel vslookup应用举例 =vslookup("第一个需要查找的对象","查找的区域范围","查找的最终目标在区域的第几列",& ...

  7. java网络编程基础——网络基础

    java网络编程 网络编程基础 1.常用的网络拓扑结构: 星型网络.总线网络.环线网络.树形网络.星型环线网络 2.通信协议的组成 通信协议通常由3部分组成: 语义部分:用于决定通信双方对话类型 语法 ...

  8. 【排序+模拟】魔法照片 luogu-1583

    题目描述 一共有n(n≤20000)个人(以1--n编号)向佳佳要照片,而佳佳只能把照片给其中的k个人.佳佳按照与他们的关系好坏的程度给每个人赋予了一个初始权值W[i].然后将初始权值从大到小进行排序 ...

  9. python 环境遇到的报错

    pipenv install -r requirements.txt 时遇到错误: `Command "python setup.py egg_info" failed with ...

  10. 2020国防科大综述:3D点云深度学习——综述(3D点云分割部分)

    目录 摘要 1.引言: 2.背景 2.1 数据集 2.2评价指标 3.3D点云分割 3.1 3D语义分割 3.1.1 基于投影的方法 多视图表示 球形表示 3.1.2 基于离散的方法 稠密离散表示 稀 ...